我正处于从RabbitMQ文档学习RabbitMQ/AMQP的阶段.我不清楚我想问那些有实践经验的人.我想让多个消费者收听同一个队列,以平衡工作量.我需要的是与RabbitMQ教程中的"工作队列"示例非常接近.我希望消费者在完成处理之后明确地确认消息以保留消息并在发生崩溃时将其委托给另一个消费者.处理消息可能需要一段时间.我的问题是AMQP是否推迟下一个消息处理,直到上一个消息被激活?如果是这样,我如何在多个工作者之间实现负载平衡并保证没有消息丢失?
不,其他消费者不会受阻.即使他们有未被承认但已交付的前任,其他消息也将被传递.如果某个通道在保留未确认的消息时关闭,则这些消息将返回到队列中.
可以使用具有重新排队参数(basic.recover,basic.reject和basic.nack)的AMQP方法将消息返回到队列,或者由于在保留未确认的消息时关闭通道.
编辑回复您的评论:
是时候深入了解AMQP规范了:
3.1.4消息队列
消息队列是一个命名的FIFO缓冲区,它代表一组消费者应用程序保存消息.应用程序可以在其权限范围内自由地创建,共享,使用和销毁消息队列.请注意,如果存在来自队列的多个读取器,或客户端事务,或使用优先级字段,或使用消息选择器,或特定于实现的传递优化,则队列可能不会表现出真正的FIFO特性.保证FIFO的唯一方法是只有一个消费者连接到队列.在这些情况下,队列可以被描述为"弱FIFO".[...]
3.1.8致谢
确认是从客户端应用程序到消息队列的正式信号,它已成功处理消息.[...]
因此确认确认处理,而不是接收.经纪人将保留该消息,直到它得到确认,以便它可以重新发送它们.但是,即使尚未确认预先存储的消息,也可以向消费者提供更多消息.消费者不会被封锁.
| 归档时间: |
|
| 查看次数: |
4548 次 |
| 最近记录: |