RabbitMQ的消息未确认和多次确认问题

当消费者失败或失去连接时:自动重新排队


当使用手动确认时,任何未确认的传递(消息)都会在传递发生的通道(或连接)关闭时自动重新排队。这包括客户端的 TCP 连接丢失、消费者应用程序(进程)故障和通道级协议异常(如下所述)。


请注意,检测不可用的客户端需要一段时间。


由于这种行为,消费者必须准备好处理重新交付,否则在实施时要牢记幂等性。 Redeliveries 将有一个特殊的布尔属性,redeliver,由 RabbitMQ 设置为 true。对于首次交付,它将设置为 false。请注意,消费者可以接收以前传递给另一个消费者的消息。


客户端错误:双重确认和未知标签

如果客户端多次确认相同的传递标记,RabbitMQ 将导致通道错误,例如 PRECONDITION_FAILED – 未知传递标记 100。如果使用未知传递标记,将抛出相同的通道异常。

代理会抱怨“未知传递标签”的另一种情况是,在与接收传递不同的通道上尝试确认,无论是肯定的还是否定的。必须在同一渠道上确认交付。