2015-05-19 136 views
3

我期待在使用EasyNetQ用於與RabbitMQ的相互作用並想知道是否可以支持以下情況下接收:EasyNetQ - 從現有的隊列

  1. 隊列與某個任意參數聲明從外部(例如,x-消息TTL)
  2. 使用EasyNetQ的客戶端代碼發送和接收來自該隊列的消息。

可能性,我發現是:

  • 簡單下iBus API要求隊列中有默認參數
  • 高級IAdvancedBus API允許指定的申報隊列的論點,但不是所有的(例如,X-MAX - 長度不能設置)

問題是我可以使用現有的隊列與自定義參數,而無需指定它們嗎?

回答

3

如果隊列已經存在並且您知道它的名字,那麼您是否可以使用IAdvancedBus.Consume<T>方法(而不用擔心IAdvancedBus.QueueDeclare)?

例如:

var queueName = "TheNameOfYourExistingQueue"; 
var existingQueue = new EasyNetQ.Topology.Queue(queueName, false); 

// bus should be an instance of IAdvancedBus 
bus.Consume<TypeOfYourMessage>(existingQueue, 
    (msg, info) => 
     { 
     // Implement your handling logic here 
     }); 

注意EasyNetQ可能有麻煩自動反序列化的消息成TypeOfYourMessage實例。如果是這種情況,解決這個問題的一種方法是繞過EasyNetQ的消息串行器,以便您可以直接訪問消息的字節數組。如果您想要走這條路線,請使用以下超載至Consume

void Consume(IQueue queue, Func<Byte[], MessageProperties, MessageReceivedInfo, Task> onMessage);