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


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

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

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

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

经过以下命令查看系统里的未确认消息: orm

#rabbitmqctl list_queues -p /path name messages_unacknowledged
Listing queues …
queue_storm_actionlog 0
dev_queue_storm_actionlog 0
…done.
相关文章
相关标签/搜索