2015-07-13 38 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 
        ); 
      }