在我的项目中,我看到有机会两次确认相同的交付标签。发生这种情况时,消费者会从队列中解除绑定,并且不会有更多消息到达消费者(使用 RabbitMQ 管理仪表板观察)。
如何检查给定的交付标签是否已被确认?有没有推荐的方法来使用 RabbitMQ API 处理这种情况?
我试图避免在我的代码中确认两次,但不幸的是,由于一些设计问题,这是不可能的。
在我的项目中,我看到有机会两次确认相同的交付标签。发生这种情况时,消费者会从队列中解除绑定,并且不会有更多消息到达消费者(使用 RabbitMQ 管理仪表板观察)。
如何检查给定的交付标签是否已被确认?有没有推荐的方法来使用 RabbitMQ API 处理这种情况?
我试图避免在我的代码中确认两次,但不幸的是,由于一些设计问题,这是不可能的。
由于AMQP 协议参考对此非常清楚:
一条消息不能被多次确认。接收对等方必须验证非零传递标记是否指的是传递的消息,如果不是这种情况,则引发通道异常。...
快速测试表明,至少在当前版本中,这不会导致消费者停止工作,但该行为可能取决于实现。
简而言之,您必须审查您的设计以避免这种情况。