RabbitMQ学习总结(二)
来源:互联网 发布:东芝移动硬盘 mac 加密 编辑:程序博客网 时间:2024/06/05 04:05
1、简单队列模式
该模式不需要生命Exchange仅使用queue队列来直接交换消息。
消费者消息应答no-ack
channel.basic_consume(callback,queue='hello',no_ack=True),默认情况no_ack=False表示consumer完成消息处理后需手动应答。向生队列服务器说明消息已处理完成,可以删除。
如果消费者遇到情况(its channel is closed, connection is closed, or TCP connection is lost)挂掉了,那么,RabbitMQ会重新将该任务添加到队列中,并由其他consumer获取该消息,确保消息不会丢失。
消费者回调函数中ch.basic_ack(delivery_tag=method.delivery_tag),表示手动应答了服务器。
服务端持久化
RabbitMQ支持消息的持久化,也就是数据写在磁盘上,当我们需要可靠的消息处理的时候应该设置消息持久化。消息队列持久化包括3个部分:
(1)exchange持久化,在声明时指定durable => 1
(2)queue持久化,在声明时指定durable => 1
(3)消息持久化,在投递时指定delivery_mode => 2(1是非持久化)
如果exchange和queue都是持久化的,那么它们之间的binding也是持久化的。如果exchange和queue两者之间有一个持久化,一个非持久化,就不允许建立绑定。
消息分发顺序
默认状态下,RabbitMQ将第n个Message分发给第n个Consumer。当然n是取余后的。它不管Consumer是否还有unacked Message,只是按照这个默认机制进行分发。那么如果有个Consumer工作比较重,那么就会导致有的Consumer基本没事可做,有的Consumer却是毫无休息的机会。那么,RabbitMQ是如何处理这种问题呢?
通过 basic.qos 方法设置prefetch_count=1 。这样RabbitMQ就会使得每个Consumer在同一个时间点最多处理一个Message。换句话说,在接收到该Consumer的ack前,他它不会将新的Message分发给它。
最终版本
设置消息确认,服务器的持久化,和消息分发顺序后,最终版本
- RabbitMQ学习总结(二)
- RabbitMQ学习(二)
- RabbitMQ使用总结(二)
- RabbitMQ学习总结(一)
- Rabbitmq 学习笔记(二)队列
- RabbitMQ学习(二)---------请求许可
- RabbitMQ 学习笔记(二):work queues
- rabbitmq学习总结
- rabbitmq 学习总结
- RabbitMQ学习总结
- RabbitMQ的学习总结
- rabbitmq(二)--命令
- rabbitmq(二)
- RabbitMQ学习之exchange总结
- RabbitMQ学习笔记二:rabbitmq发送接收消息Helloworld(Java版)
- RabbitMQ学习(二).NET Client之Work Queues
- RabbitMQ学习小结(二)—— Work Queues[Python]
- RabbitMQ学习之Java客户端连接测试(二)
- RabbitMQ学习总结(一)
- 1506:数圈圈
- 实现中文字符串的反/翻转
- MYSQL分区性能
- MVC基本原理
- RabbitMQ学习总结(二)
- JAVA运算符\操作符
- Tesseract ocr文字识别
- Torch load model from gpu to cpu, so can convert to pytorch
- 排序--冒泡排序和快速排序(java)
- 使用yii AR 完成单个表的CURD操作
- 在redis中优化频繁操作redis产生多次链接引发的网络延时
- javascript/js 获取当前页面地址栏数据
- tensorflow进行MNIST手写数字识别-CNN