一、什么是RabbitMQ?
- 定义:消息队列协议的一个实现
- 应用:解决多系统之间的数据交换(消息通知/通讯)问题,你也可以把它用于系统间服务的相互调用(RPC)
- 例如:A负责监听系统数据改变 B负责将改变的数据更新到数据库中,B如何得知A发生了改变?
如果AB无法通信那么B只能写一个定时任务一直更新数据库,不管数据是否有改变。有了RabbitMQ通信,一切就变得简单了。
二、RabbitMQ消息模型的核心思想(core idea)
生产者会把消息发送给RabbitMQ的交换中心(Exchange),Exchange的一侧是生产者,另一侧是一个或多个队列,由Exchange决定一条消息的生命周期–发送给某些队列,或者直接丢弃掉。
三、RabbitMQ三种模式
1.fanout(广播,发布订阅)
-
代码逻辑:
- 指定exchange为fanout;
- 生产者发送消息
- 消费者绑定exchange
-
实际流程:
- 生产者将消息发送到交换器;
- 队列接收所有消息,
- 消费者消费queue接收到的消息;
-
限制:交换机一致即可
图片示意:
2.direct(直接交换) -
代码逻辑:
- 指定exchange为direct;
- 生产者发送消息时设置routing_key
- 消费者绑定exchange并指定bind_key与消息的routing_key相同;
-
实际流程:
- 生产者将消息发送到交换器;
- 队列根据routing_key接收消息,没有对应的routing_key则消息丢失;
- 消费者消费queue接收到的消息
-
限制:交换机一致且routing_key一致
图片示意:
3.topic(匹配)
和direct模式一样,但是routing_key是匹配模式,不是#匹配多个,*匹配一个 -
代码逻辑:
- 指定exchange为direct;
- 生产者发送消息时设置routing_key
- 消费者绑定exchange并指定bind_key与消息的routing_key相同;
-
实际流程:
- 生产者将消息发送到交换器;
- 队列根据routing_key接收消息,没有对应的routing_key则消息丢失;
- 消费者消费queue接收到的消息
-
限制:交换机一致且routing_key匹配
-
图片示例: