1. 程式人生 > >Rabbitmq消息服務器通訊異常: name must not be blank

Rabbitmq消息服務器通訊異常: name must not be blank

res tex check ive routing 遇到 expires span rabbit

前人挖坑,後人填! 倒黴的遇到一個破項目,該 項目使用了 RabbitMQ 消息隊列向服務器發送消息, 但在發送中老是報 RabbitMQ 服務器異常! 呃,查看了服務器,服務器好好的,日誌中卻是這樣的記錄, 真是見鬼, 調試跟蹤了一下發現:

RabbitMQ消息服務器通訊異常:System.ArgumentException: name must not be blank
參數名: name
在 EasyNetQ.Preconditions.CheckNotBlank(String value, String name, String message)
在 EasyNetQ.RabbitAdvancedBus.QueueDeclare(String name, Boolean passive, Boolean durable, Boolean exclusive, Boolean autoDelete, Nullable`1 perQueueMessageTtl, Nullable`1 expires, Nullable`1 maxPriority, String deadLetterExchange, String deadLetterRoutingKey, Nullable`1 maxLength, Nullable`1 maxLengthBytes)

在 EasyNetQ.Producer.SendReceive.<>c__DisplayClass12_0.<DeclareQueue>b__0(String key)
在 System.Collections.Concurrent.ConcurrentDictionary`2.AddOrUpdate(TKey key, Func`2 addValueFactory, Func`3 updateValueFactory)
在 EasyNetQ.Producer.SendReceive.DeclareQueue(String queueName)
在 EasyNetQ.Producer.SendReceive.Send[T](String queue, T message)

這個異常主要 是在調用 RabbitMQ接口的Send 方法時,拋出來的,先來看看 Send 方法的說明

        //
        // Summary:
        //     Send a message directly to a queue
        //
        // Parameters:
        //   queue:
        //     The queue to send to
        //
        //   message:
        //     The message
        //
        // Type parameters:
        
// T: // The type of message to send void Send<T>(string queue, T message) where T : class;

這個接口中有兩個參數, queue和 message , 但這現個參數 queue 是不能為空的,它表示的是一個隊列的名稱

解決方案:

在向 Send 接口傳遞queue 參數時,判斷下是否為空或null

Rabbitmq消息服務器通訊異常: name must not be blank