在我的应用程序中,当我从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 });