2015-07-13 26 views
0

我使用RabbitMQ的隊列解決方案,我有4個隊列,一個消費者在RabbitMQ的一個消費者多處理器。我希望我的消費者使用所有這些隊列,併爲每個隊列提供單獨的處理程序。無法實現使用EasynetQ客戶對於.NET

我GOOGLE了這一點,並發現的RabbitMQ和EasyNetQ(.NET客戶端的RabbitMQ),提供了先進的API(this linkThis link

在此文章中提供的示例代碼定義爲多處理器這一功能消費者:

bus.Advanced.Consume(queue, x => 
x.Add<MyMessage>((message, info) => { Console.WriteLine("Got MyMessage {0}", message.Body.Text); countdownEvent.Signal(); }) 
.Add<MyOtherMessage>((message, info) => { Console.WriteLine("Got MyOtherMessage {0}", message.Body.Text); countdownEvent.Signal(); }) 
); 

我的問題: 所以,當我嘗試使用這個例子中,添加<>方法是未知的。 問題是什麼?以及我應該如何使這種方法可用?

我的代碼的使用部分:

using RabbitMQ; 
using EasyNetQ; 
using EasyNetQ.Consumer; 

我的代碼:

using (var bus = RabbitHutch.CreateBus("host=localhost;prefetchcount=100")) 
      { 
       var queue = bus.Advanced.QueueDeclare("QueueMessageTypes.VehicleDeviceChangeMessage:QueueMessageTypes_VehicleDeviceChangeMsg"); 

       bus.Advanced.Consume(queue, x => x 
         .Add<PositionMessage>((message, info) => 
         { 
          Console.WriteLine("Got MyMessage {0}", message.Body.Text); 
         }) 
         .Add<VehicleDeviceChangeMessage>((message, info) => 
         { 
          Console.WriteLine("Got MyOtherMessage {0}", message.Body.Text); 
         }) 
        ); 
      } 

我想我應該用一個命名空間或類中使用添加<>方法。可能它是一個擴展方法,我應該從庫中找到並添加相關的類。

回答

0

的許多方法的一些搜索和測試之後,我寫我的代碼的完整的語法和忽略編譯器錯誤提示,和C#編譯器接受添加<>方法。然後知道添加<>方法而不添加任何使用部分或其他額外的工作。

但我有另一個問題,我認爲我應該把它發佈在單獨的問題: 我添加了處理程序,但他們不對消息採取任何行動。消息仍然在隊列中。

我finall代碼編譯器接受它(但能源部無法正常工作):

using (var advancedBus = RabbitHutch.CreateBus("host=localhost;prefetchcount=100").Advanced) 
      { 
       var queue = advancedBus.QueueDeclare("MyQueue"); 

       advancedBus.Consume(queue, x => x 
         .Add<MessageType1>((message, info) => 
            { 
             Console.WriteLine("MessageType1 Body : " + message.Body.Body); 
             ); 
            }) 
         .Add<MessageType2>((message, info) => 
          { 
           Console.WriteLine(" MessageType2 Body: " + message.Body.Body); 
           } 
         ) 
         .ThrowOnNoMatchingHandler = false 
        ); 
      }