RabbitMQ多次确认同一消息关闭了消费者

时间:2017-11-21 07:53:13

标签: go rabbitmq

如果我使用Delivery.Ack方法两次确认相同的消息,我的消费者频道就会自行关闭。

这是预期的行为吗?有没有人经历过这个?

我两次承认相同消息的原因是一个特殊情况,我必须将原始消息分解为副本并在消费者上处理它们。一旦消费者处理了所有事情,它就会循环并回应所有事情。由于存在实体的副本,因此它会同时发出相同的消息,并且我的消费者频道会关闭

1 个答案:

答案 0 :(得分:3)

根据AMQP reference,当第二次确认消息时会引发通道异常:

  

不得多次确认消息。接收对等体   必须验证非零交货标签是指交付   消息,如果不是这样,则引发通道异常。

Ack(...)的同一消息的第二次调用不会返回错误,但由于从服务器收到此异常,该频道将被关闭:

Exception (406) Reason: "PRECONDITION_FAILED - unknown delivery tag ?"

可以通过Channel.NotifyClose注册一个监听器来观察此异常。