3.RABBITMQ_6种工作模式
RabbitMQ的基本结构
1. Simple工作模式
- 不用显示声明交换机,只需声明一个队列
- 生产者指定队列名发送消息给mq,然后会有一个默认的交换机将消息转发给这个队列。
- 消费者负责监听这个队列,一有消息就会得到通知做出响应。
- golang代码示例
2. 工作队列模式(Work queues)
- 和简单队列模式基本一样,不过有一点不同,该模式有多个消费者在监听队列。
- rabbitmq会以轮询的方式将消息发给多个消费者确保一条消息只会被一个消费者消费
- 任务分发默认使用的是公平队列调度的原则
- golang代码示例
3. 发布订阅模式(Publish/subscribe)
- 和上面2种模式默认提供交换机不同的是,该模式需要显示声明交换机,
- 然后可以创建多个队列和这个交换机进行绑定。
- 生产者发消息给mq时需要指定交换机,然后交换机将消息转发给与自己绑定的所有队列
- 消费者监听指定的队列获得消息。每个队列可以有多个消费者监听,同样也是以轮询的机制发给消费者
- 实际使用Exchange的广播路由模式(Fanout)
- goalng代码示例
4. Routing 模式
- 从生产端指定消费者进行消费
- 和发布订阅模式不同的是,队列绑定交换机时需要指定一个routingkey
- 生产者端通过指定routingkey参数来指定消费端进行消费
- golang代码示例
5. Topic模式(路由模式的一种)
- 星号井号代表通配符,星号代表多个单词,井号代表一个单词
- 路由功能添加模糊匹配
- 消息产生者产生消息,把消息交给交换机,交换机根据key的规则模糊匹配到对应的队列,由队列的监听消费者接收消息消费
- goalng代码示例
6. heard模式
省略
7. 参数解释:
-
Queue相关:
- durable:bool
控制消息是否持久化,如果为false,服务器重启之后消息丢失 - autoDelete: bool
是否自动删除,当我们最后一个消费者断开连接的时候,是否将消息从队列从删除 - exclusice: bool
是否具有排他性,队列只有自己可见,其他用户看不到 - nowait: bool
是否阻塞,发送消息是否等服务端返回
- durable:bool
-
Publish相关
- mandatory:bool
如果为true,会根据exchange类型,和routingkey规则如果无法找到符合条件的*队列,会把发送的消息返回给发送者 - immediate: bool
如果为true,当exchange发送消息到队列后发现队列上没有绑定消费者,则会把消息返回给发送者
- mandatory:bool
-
Consume相关
- autoAck: bool
是否自动应答,设置为true消息消费完会主动告诉broker,如果设置为false,需要实现回调函数 - exclusive: bool
是否具有排他性,队列只有自己可见,其他用户看不到 - noLocal: bool
如果设置为true,表示不能将同一个connection中发送的消息传递给这个connection中的消费者 - nowait:bool
是否阻塞消费
- autoAck: bool