提纲:
🔥RabbitMQ
特点
结构
Exchange类型
工作流程
重复消费问题
消息的可靠传输
消息的有序传输
处理大量积压的消息
高可用
一、RabbitMQ
1. 特点
-
1、解耦:使用传统的服务间远程调用方式,需要在代码中直接调用其他模块,并且其他模块的不可用会导致整个业务流程不可用;而在消息队列中,调用者仅需要将消息放入消息队列,由调用的模块订阅这个队列并取出消息进行消费,不需要知道具体调用了什么模块,以及其他模块的健康状态
-
2、异步:传统的远程调用方式,需要等待调用的模块全部执行完毕才能返回;在消息队列中,调用者可以将消息放入消息队列后直接返回结果,由消费者异步的处理消息
-
3、削峰/限流:假设服务器最多能一次性处理 1k 请求,在少数的某一时刻(例如秒杀)请求突增到 100k,会导致服务器的崩溃,而如果将服务器的硬件资源强行提升,会造成资源浪费;使用消息队列,可以由生产者将消息发送到消息队列,由消息队列对服务器暂时无法处理的请求进行堆积,从而实现短时间内突发的大量请求的平滑处理
2.结构
-
1、Publisher:消息生产者
-
2、Consumer:消息消费者
-
3、Broker:一个 MQ 服务节点
-
Queue:消息队列
-
Exchange:交换机,根据消息的 Routing Key 找到有对应 Binding Key 的消息队列进行消息转发
-
-
4、Routing Key:消息的路由关键字
-
5、Binding Key:队列与交换机绑定时声明
-
6、Connection:Consumer、Publisher 与 Broker 之间建立的连接,例如 TCP 连接
-
7、Channel:信道,一个 TCP 连接可以包含多个信道,以此来多路复用一个 TCP 连接,减少连接建立和销毁的开销,MQ 的通信都是在信道中完成的
-
8、Virtual host:虚拟主机,将不同环境的 Exchange 进行隔离
3.Exchange 类型
-
1、Fanout Exchange:将消息发送至所有与其进行绑定的队列当中
-
2、Direct Exchange:将消息发送至 BindingKey 与 RoutingKey 完全匹配的队列当中,是一种单播模式
-
3、Topic Exchange:类似于通配符匹配,由 '.' 将单词隔开,将消息发送至所有匹配的队列当中
4.工作流程
-
1、预先准备
-
在 Publisher 服务中声明一个交换机和交换队列
-
通过 BindingKey 将交换队列绑定至交换机
-