为什么在重新排队时从RabbitMQ收到相同的消息?
背景 我的队列中有两条消息:为什么在重新排队时从RabbitMQ收到相同的消息?,rabbitmq,amqp,Rabbitmq,Amqp,背景 我的队列中有两条消息: 福 酒吧 我有一个通道,一个Qos活动的消费者,预取计数为1 场景 消息传递foo进入,我拒绝带有requeue=true的消息 预期: 传递的下一条消息是bar 实际: 传递的下一条消息是foo 问题: 为什么我的消费者收到的信息是它刚刚重新发出的,而不是下一条?我怎样才能得到上面描述的结果 我希望重新排队的消息位于队列的末尾 我已经考虑过确认并重新发布邮件,但这会增加邮件丢失的风险。来自 可以使用具有以下特性的AMQP方法将消息返回到队列: requeue参
- 福
- 酒吧
foo
进入,我拒绝带有requeue=true
的消息
预期:
传递的下一条消息是bar
实际:
传递的下一条消息是foo
问题:
为什么我的消费者收到的信息是它刚刚重新发出的,而不是下一条?我怎样才能得到上面描述的结果
我希望重新排队的消息位于队列的末尾
我已经考虑过确认并重新发布邮件,但这会增加邮件丢失的风险。来自
可以使用具有以下特性的AMQP方法将消息返回到队列:
requeue参数(basic.recover、basic.reject和basic.nack),或由于在保存未确认消息时通道关闭。这些都有吗
场景导致消息在队列的后面重新排队,以便
RabbitMQ版本早于2.7.0。从RabbitMQ 2.7.0版,
消息始终按发布顺序保存在队列中,即使在
出现重新排队或通道关闭
重点矿山
因为您只有一个消费者,所以这种行为是意料之中的
您可以将消息重新发布到同一队列,
这将确保问题消息最终出现在尾部
您的另一个选项是为失败消息创建一个新队列,以便
请分别处理。谢谢您指出这一点。我以前没有找到那个文档页面。你对如何以我想要的方式使用消息有什么建议吗?嗯,我认为你唯一的选择是重新发布到同一队列。您的另一个选择是为失败的消息创建一个新队列,然后分别处理它们?恐怕是这样。我会做一些测试,看看它有多可靠。再次感谢!当您将消息发布到队列(相同或其他)时,它是可靠的,除非您遇到应用程序或rabbitmq服务器的灾难性故障。