Solution for unable to create "dead-letter-exchange" in RabbitMQ


在參考 Dead-Letter-Exchange 進行Dead-letter-exchange的理解,

在本地時,想要創建 Dead-letter-exchange 時,一直報錯,錯誤如下:

Unhandled Exception: RabbitMQ.Client.Exceptions.OperationInterruptedException: The AMQP operation was interrupted: AMQP close-reason, initiated by Peer, code=406, text="PRECONDITION_FAILED - inequivalent arg 'x-dead-letter-exchange' for queue 'q_test' in vhost '/': received the value 'q-dead-letter-exchange' of type 'longstr' but current is none", classId=50, methodId=10, cause=
   at RabbitMQ.Client.Impl.SimpleBlockingRpcContinuation.GetReply(TimeSpan timeout)
   at RabbitMQ.Client.Impl.ModelBase.QueueDeclare(String queue, Boolean passive, Boolean durable, Boolean exclusive, Boolean autoDelete, IDictionary`2 arguments)
   at RabbitMQ.Client.Impl.AutorecoveringModel.QueueDeclare(String queue, Boolean durable, Boolean exclusive, Boolean autoDelete, IDictionary`2 arguments)
   at CNBlogs.Question.EventBusRabbitMQ.EventBusRabbitMQ.CreateConsumerChannel()

去官網查了查,姿勢也正確,先聲明一個Exchange

channel.ExchangeDeclare("q-dead-letter-exchange", type: "direct");

然后再指定 x-dead-letter-exchange 參數

var args = new Dictionary<string, object>()
            {
                {"x-dead-letter-exchange", "q-dead-letter-exchange"}
            };

最后放到隊列聲明里面:

 channel.QueueDeclare(queue: _queueName,
                                 durable: true,
                                 exclusive: false,
                                 autoDelete: false,
                                 arguments: args);

然而,每次一運行就報上面那個錯誤,最后子啊Github上找到了答案

原因可能是我原來的隊列中,因為有尚未確認的消息在。然后,把RabbitMQ 中的Queue 和Exchange 刪除,重新運行程序就成功了。下面是Queue和Exchange 的截圖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM