关于rabbitmq的确认方式的问题

ghg1uchk  于 12个月前  发布在  RabbitMQ
关注(0)|答案(2)|浏览(108)

我知道消费者交付确认分为手动或自动模式。但在我看来,交付确认的概念在手动模式下是一样的。自动模式在消息发送后立即删除,与ack有什么关系?
我找到了官方文档enter image description here
我认为自动模式是当消费者收到一条消息时,它不处理以下步骤,它对rabbitmq进行确认,让它从队列中删除消息。
我希望得到详细的答复。

yvt65v4c

yvt65v4c1#

消费者交付确认中关于手动或自动模式的不同在于,消费者获得消息将给予ack消息给RabbitMQ,RabbitMQ将从队列中删除消息。
事实上,你的消费者消费一条消息需要一些时间,消费时间的长短取决于你的代码运行时。
假设你的消费者发送确认到你的Rabbitmq,你的系统将丢失消息。
但是如果你是手动确认RabbitMQ,你的RabbitMQ会知道你的消费者遇到了一些问题,它会把消息传递给其他消费者。
另一方面,如果你的消费者未能消费消息,你可以简单地不向RabbitMQ发送ACK,以确保你的消息将有一个正确的消费。

rqqzpn5f

rqqzpn5f2#

考虑以下场景:消费者负责处理消息并将其插入数据库。但是,使用者在收到消息后很快重新启动,无法处理数据并将其插入数据库。同时,代理在消息被消费时删除它。可以通过手动选择ack消息来防止此问题。
您可以通过手动确认将飞行中事务失败减少到合理的程度。
我已经为demo sometime back准备了这个用例,你可以参考consumer1是如何工作的。

相关问题