RabbitMQ确认超时

时间:2018-11-19 11:57:18

标签: rabbitmq


我正在使用RPC模式通过RabbitMQ处理对象。
您怀疑我有一个对象,并且想要完成该过程,然后将确认发送给RPC客户端。
默认情况下,Ack的超时时间约为3分钟。
我的过程需要很长时间。
我该如何为每个对象的确认更改超时时间,或者如何处理类似的进程?

2 个答案:

答案 0 :(得分:10)

现代版本的 RabbitMQ 有一个 delivery acknowledgement timeout

<块引用>

在现代 RabbitMQ 版本中,对消费者强制执行超时 交货确认。这有助于检测有问题(卡住)的消费者 从不承认交付。这样的消费者可以影响节点的 磁盘数据压缩和潜在的驱动节点的磁盘空间。

如果消费者没有确认其交付超过超时 值(默认为 15 分钟),其通道将关闭 PRECONDITION_FAILED 通道异常。该错误将由 消费者连接到的节点。

错误信息为:Channel error on connection <####> : operation none caused a channel exception precondition_failed: consumer ack timed out on channel 1

默认超时为 15 分钟(900000 毫秒),由 consumer_timeout 中的 rabbitmq.conf 参数配置

答案 1 :(得分:2)

RabbitMQ不提供任何类型的超时机制来确认消息。官方Python教程对此进行了讨论:

There aren't any message timeouts; RabbitMQ will redeliver the message only when the worker connection dies. It's fine even if processing a message takes a very, very long time.

AMQP 0-9-1规范的第3.1.8节描述了确认,并且非常清楚它们可以是自动的(客户端无需执行任何操作,消息在传递后即得到确认)或显式(客户端必须为已处理的每条消息或每组消息都添加一个确认)。

这是2009年的一些讨论,证实了这种情况。

所以:是的,如果您需要超时以在某个时间间隔后自动发送NACK,则您必须自己这样做。