代码之家  ›  专栏  ›  技术社区  ›  Crusaderpyro

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

  •  2
  • Crusaderpyro  · 技术社区  · 7 年前

    如果我使用 Delivery.Ack 方法,我的消费者渠道只会自动关闭。

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

    我两次确认同一条消息的原因是一种特殊情况,在这种情况下,我必须将原始消息分解为副本,并在消费者身上进行处理。一旦消费者处理了一切,它就会循环并确认一切。由于实体有副本,它会两次确认同一条消息,我的消费者渠道就会关闭

    1 回复  |  直到 7 年前
        1
  •  3
  •   Amir Rahimi Farahani    7 年前

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

    消息的确认次数不得超过一次。接收对等方 必须验证非零交付标签是否指交付的 消息,如果不是这样,则引发通道异常。

    第二次呼叫 Ack(...) 对于相同的消息,不会返回错误,但由于从服务器接收到此异常,通道将关闭:

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

    可以通过以下方式注册侦听器: Channel.NotifyClose 观察此异常。