无法使用EasynetQ Client for .Net为RabbitMQ中的使用者实现多处理程序

时间:2015-07-13 11:29:19

标签: .net rabbitmq consumer easynetq

我使用Rabbitmq Queue解决方案,我有4个队列和一个消费者。我希望我的消费者使用所有这些队列,并为每个队列提供单独的处理程序。

我用Google搜索并发现Rabbitmq和EasyNetQ(.Net Client for 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(); }) 
);

我的问题: 因此,当我尝试使用此示例时,Add&lt;&gt;方法未知。 问题是什么?以及如何使这种方法可用?

我的代码使用了部分:

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);
                        })
                    );
            }

我想我应该使用命名空间或类来使用Add&lt;&gt;方法。可能它是我应该找到的扩展方法,并从库中添加相关的类。

1 个答案:

答案 0 :(得分:0)

经过对许多方法的一些搜索和测试后,我编写了我的代码的完整语法并忽略了编译器错误提示,并且C#Compiler接受了Add&lt;&gt;方法。 之后,它知道Add&lt;&gt;没有添加任何使用部分或其他额外工作的方法。

但我有另一个问题,我想我应该在另外的问题中发布: 我添加了处理程序,但它们不对消息采取任何操作。消息保留在队列中。

我的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
                      );
            }