为什么当我第二次在 rabbitmq 中重新排队时'unknown delivery tag'错误?



在我的应用程序中,当我从rabbitmq获得消息后,我将消息推送到客户端,并等待其ACK消息,如果客户端在一段时间后没有回复ACK,我将在rabbitmq中用basic.reject重新排列消息,requeue为真。

这对于第一次重新排队操作来说很好,但在我第二次重新排队相同的消息后,通道突然关闭。从服务器日志中,我得到了这个错误:

{amqp_error,precondition_failed,"unknown delivery tag 2",'basic.reject'}

我想这是因为该消息已从队列中删除。为什么会发生这种情况?

我有类似的错误

Error: Channel closed by server: 406 (PRECONDITION-FAILED) with message "PRECONDITION_FAILED - unknown delivery tag 1"
    at Channel.C.accept (C:Owletshopify_email_servernode_modulesamqpliblibchannel.js:422:17)
    at Connection.mainAccept [as accept] (C:Owletshopify_email_servernode_modulesamqpliblibconnection.js:64:33)
    at Socket.go (C:Owletshopify_email_servernode_modulesamqpliblibconnection.js:478:48)
    at Socket.emit (node:events:390:28)
    at Socket.emit (node:domain:475:12)
    at emitReadable_ (node:internal/streams/readable:578:12)
    at processTicksAndRejections (node:internal/process/task_queues:82:21) {
  code: 406,
  classId: 60,
  methodId: 80

我的解决方案是断言具有启用选项的通道持久channel.assertQueue(queueName, { durable: true });

最新更新