MQ

2024-11-23 14:32

MQ介绍

mq指的是消息队列。在数据结构中就是“先进先出”。例如我们在超市买东西排队,先排到的先结账,这就是典型的先进先出,One by One。

MQ常用名词

Broker

消息服务器,作为server提供消息核心服务

Producer

消息发布者,业务的发起方,负责生产消息传输给broker,

Consumer

消息订阅者,业务的处理方,负责从broker获取消息并进行业务逻辑处理

Topic

主题,发布订阅模式下的消息统一汇集地,不同发布者发布不同的主题,由消息服务器分发到不同的订阅者,实现消息的广播

Queue

队列,某个发布者向指定queue发送消息,订阅者订阅特定的queue完成消息的点对点接收

Message

消息体,根据不同通信协议定义的固定格式进行编码的数据包,来封装业务数据,实现消息的传输


图片

MQ解决的问题

流量削峰

例如,电商平台在高峰期的时候可能一秒内最多处理1万笔订单。如果业务量达到2万笔,那么只有两种可能:要么挤爆服务器,要么程序控制不允许超出1万。

但是呢,如果我们用消息队列做个缓冲,就可以把超出一万的业务消息全部存储在消息服务器中,然后在一个时间段内去处理。对于用户的感受无非就是多等了几秒钟。总比不能下单的体验要好。

消息分发

消息分发又分为两部分:消息发布和消息订阅

例如:A发布一个消息主题之后,不论B还是C还是D都可以去订阅它。如果没有这种分发机制的话,bcd在想要订阅a,a就得改代码去调用bcd的服务。。。


图片


有了消息队列后,A只管发送一次消息,BCD只需要监听消息就可以了。A服务作为基础服务完全不需要对代码有改动。

异步消息

有些服务间调用是异步的。例如A调用B,B的执行时间很长,但是A想知道B什么时候可以执行完。一般有两种方式

1:A每隔一段时间就去调用B的查询接口,查询一次结果;

2:A提供一个api,B执行完之后调用api通知A已经完成;

这两种方法都不是很可靠

有了MQ之后,MQ就可以作为一个消息中间件,监听B处理完的消息,然后分发给A。这样一来,A不用反复调用B的接口,也不用给B提供接口

A还能及时的得到异步处理成功的消息。简直是完美。


图片

常见的MQ消息中间件

ActiveMQ、RabbitMQ,Kafka,RocketMQ

常见的MQ中间件协议

AMQP协议,MQTT协议,STOMP协议,XMPP协议


以下是大神回复:


ActiveMQ:轻量级的,一般企业用的比较少

RabbitMQ:erlang开发,高性能,高并发,支持集群模式,一般针对大并发需求要求比较多,支持python、java、golang、ruby、c++等语言调用,官方文档完整,对接比较方便,且整个管理控制台很友好,但流控机制比较操蛋

Kafka:java开发,性能强悍,支持持久化,大数据企业用的比较多,属于apache全家桶一员,官方未提供管理控制台,不过有开源的几个版本可以自己安装部署来管理集群

RocketMQ:java开发,目前官网文档不是很完整,也支持高并发,有java client,c++基本要自己封装,业务对接有一定成本,属于apache全家桶一员,控制台稀烂。

相关文章
热点文章
精彩视频
Tags

站点地图 在线访客: 今日访问量: 昨日访问量: 总访问量: