0

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

我用谷歌搜索了这个,发现 Rabbitmq 和 EasyNetQ(RabbitMQ 的 .Net 客户端)通过高级 API 提供了这个功能(这个链接这个链接

本文提供的示例代码为消费者定义多个处理程序:

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<> 方法是未知的。问题是什么?我应该怎么做才能使这种方法可用?

我的代码使用部分:

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<> 方法。可能这是我应该从库中找到并添加相关类的扩展方法。

4

1 回答 1

0

在对许多方法进行了一些搜索和测试后,我编写了代码的完整语法并忽略了编译器错误提示,并且 C# Compiler 接受了 Add<> 方法。之后它知道 Add<> 方法,而无需添加任何使用部分或其他额外工作。

但我还有另一个问题,我认为我应该将其发布在单独的问题中:我添加了处理程序,但它们不对消息采取任何行动。消息保留在队列中。

我的编译器接受它的最终代码(但不起作用):

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
                      );
            }
于 2015-07-14T06:31:53.767 回答