gpt4 book ai didi

php - RabbitMQ PRECONDITION_FAILED - 未知的交付标签

转载 作者:行者123 更新时间:2023-12-04 23:22:00 29 4
gpt4 key购买 nike

我们有一个 PHP 应用程序,它通过 WebSocket 连接(PHP AMQP pecl 扩展 v1.7.1 和 RabbitMQ 3.6.6)将消息从 RabbitMQ 转发到连接的设备。

消息从队列数组(每个 websocket 连接 1 个)中消费,当我们通过 websocket 收到消息已收到确认时由消费者确认(因此我们可以将未在可接受的时间范围内传递的消息重新排队)。这是以非阻塞方式完成的。

99% 的情况下,这可以完美运行,但偶尔我们会收到错误“RabbitMQ PRECONDITION_FAILED - 未知的交付标签”。这将关闭 channel 。据我了解,此异常是以下条件之一的结果:

  • 消息已被确认或拒绝。
  • 尝试通过消息未通过的 channel 进行确认。
  • 在消息超时 (ttl) 到期后尝试确认。

  • 我们已针对上述每种情况实现了保护,但问题仍然存在。

    我意识到有许多实现细节可能会影响这一点,但在概念层面上,是否还有其他我们没有考虑过并且应该处理的失败案例?或者有没有更好的方法来实现上述功能?

    最佳答案

    “PRECONDITION_FAILED - unknown delivery tag”通常是由于双重确认、错误 channel 上的确认或不应该确认的消息而发生的。

    因此,在同一情况下,您要使用另一个 channel 执行 basic.ack 两次或 basic.ack

    关于php - RabbitMQ PRECONDITION_FAILED - 未知的交付标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42567689/

    29 4 0