【问题标题】:Multiple acknowledge for the same delivery tag同一交货标签的多次确认
【发布时间】:2015-08-03 18:25:47
【问题描述】:

在我的项目中,我发现有机会两次确认相同的交付标签。发生这种情况时,消费者会从队列中解除绑定,并且不会有更多消息到达消费者(使用 RabbitMQ 管理仪表板观察到)。

如何检查给定的交付标签是否已被确认?有没有推荐的方法来使用 RabbitMQ API 处理这种情况?

我试图避免在我的代码中确认两次,但不幸的是,由于一些设计问题,这是不可能的。

【问题讨论】:

  • @Gas amqp 协议声明A message MUST not be acknowledged more than once.。兔子客户端可以在确认之上有一个层。如果我保持正确,这就是 Spring 的行为。
  • @NicolasLabrot 是的,你是对的,顺便说一句,我尝试使用 java 客户端确认多个,但我没有遇到问题。实际上从未有过这种情况,也许我评论有点肤浅,但在我的测试中我没有看到副作用。我提供修改评论。谢谢!
  • @syodage 我删除了第一条评论,因为它不正确。顺便说一句,如果您发布一些代码,我们会尽力帮助您。
  • @Gabriele 这是我确认 channelObj.basicAck(Long.parseLong(dTag), false);如果我为同一条消息触发两次,则队列开始有线连接....有没有一种方法可以检查 dtag 是否存在,然后只有我发送确认?

标签: rabbitmq rabbitmq-exchange


【解决方案1】:

the AMQP protocol reference 对此非常清楚:

一条消息不得多次确认。 接收端必须验证非零传递标记是否指的是传递的消息,如果不是这种情况,则引发通道异常. ...

一项快速测试表明,至少在当前版本中,这不会导致消费者停止工作,但该行为可能取决于实现。

简而言之,您必须审查您的设计以避免这种情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多