如果我使用Delivery.Ack方法两次确认相同的消息,我的消费者频道就会自行关闭。
这是预期的行为吗?有没有人经历过这个?
我两次承认相同消息的原因是一个特殊情况,我必须将原始消息分解为副本并在消费者上处理它们。一旦消费者处理了所有事情,它就会循环并回应所有事情。由于存在实体的副本,因此它会同时发出相同的消息,并且我的消费者频道会关闭
答案 0 :(得分:3)
根据AMQP reference,当第二次确认消息时会引发通道异常:
不得多次确认消息。接收对等体 必须验证非零交货标签是指交付 消息,如果不是这样,则引发通道异常。
对Ack(...)
的同一消息的第二次调用不会返回错误,但由于从服务器收到此异常,该频道将被关闭:
Exception (406) Reason: "PRECONDITION_FAILED - unknown delivery tag ?"
可以通过Channel.NotifyClose注册一个监听器来观察此异常。