【转载】关于RabbitMQ的消息确认

旧街凉风 提交于 2019-11-27 07:09:16


      RabbitMQ 将消息投递到客户端后,客户端如果没处理完这个消息就死掉了,这个消息还会不会存在?这取决于 RabbitMQ 的消息确认机制(Message acknowledgment)是否打开。

      为了确保消息不会丢失,RabbitMQ 支持消息确认机制。(在开启了消息确认机制后)客户端需要在收到消息并处理完后,发送一个 ack 消息给 RabbitMQ,告诉它该消息可以被安全删除了。假如客户端在发送 ack 之前意外死掉了,那么 RabbitMQ 会将消息投递到下一个 consumer 客户端。如果有多个 consumer 客户端,RabbitMQ 在投递消息时是轮询的。

      RabbitMQ 如何判断客户端死掉了?唯一根据是客户端连接是否断开。这里没有超时机制,也就是说客户端可以处理一个消息很长时间,只要没断开连接,RabbitMQ 就一直等待 ack 消息。

消息确认机制默认打开的,除非你设置 no_ack=True 标记来手工关闭它。

通过如下命令查看系统里的未确认消息:

#rabbitmqctl list_queues -p /path name messages_unacknowledged
Listing queues …
queue_storm_actionlog 0
dev_queue_storm_actionlog 0
…done.


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!