https://blog.csdn.net/wmh1152151276/article/details/90299834
https://www.cnblogs.com/xyfer1018/p/11581511.html
https://zhuanlan.zhihu.com/p/136846912
https://blog.csdn.net/Weixiaohuai/article/details/93494018?utm_medium=distribute.pc_relevant_download.none-task-blog-blogcommendfrombaidu-2.nonecase&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-blogcommendfrombaidu-2.nonecas
Rabbitmq一般有以下几种工作模式
工作模式
- 1. 简单队列模式(Simple Queue)
- 2. 工作队列模式(Work queues)
- 3. 发布订阅模式Publish/subscribe(fanout)
- 4. 路由模式Routing(direct)
- 5. 通配符模式(Topic)
- 6. Header模式
- 7. RPC 模式
1. 简单队列模式(Simple Queue)
不用声明交换机,只需要定义一个队列
- 生产者:指定queue名发送message,默认Exchange会将message转发到该queue
- 消费者:监听这个队列,,一有消息就可以消费了
2. 工作队列模式(Work queues)
其实和简单队列模式区别在于:
- 定义多个消费者来消费,一条消息只能被一个消费者进行消费。
工作队列:有轮询分发和公平分发两种模式
- 轮询分发
不同消费者即使消费能力不一样,但最终接受到的消息一样多 - 公平分发
消费能力高的消费的更多,能者多劳。
公平分发代码实现上要注意:
- 生产者、消费者指定:channel.basicQos(1);
- 消费者消费完消息自动发送确认消息hannel.basicAck(envelope.getDeliveryTag(), false);
- 消费者必须关闭自动应答:autoAck = false;
3. 发布订阅模式(publish/subscribe)
该模式和工作队列的区别在于:
- 该模式模式需要显示声明fanout交换机。
- 生产者将消息发送到交换器(Exchange),交换器绑定多个队列,然后将消息转发给绑定的所有队列,每个队列可以有多个消费者监听。
4. 路由模式(routing)
该模式和发布订阅的区别在于:
- 需要申明direct交换机
- 队列绑定交换机需要制定一个routingKey
- 生产者发送消息时需要制定Exchange和routingKey
5. 通配符模式(Topic)
该模式与路由模式的区别在于:
- 需要声明topic交换机
- 可以设置带有通配符进行模糊匹配的routingkey
6. Header模式
该模式与topic不同的地方在于:
- 需要声明header交换机
- header模式取消routingkey,使用header中的 key/value(键值对)匹配队列。
网友评论