我使用Rabbitmq Queue解决方案,我有4个队列和一个消费者。我希望我的消费者使用所有这些队列,并为每个队列提供单独的处理程序。
我用Google搜索并发现Rabbitmq和EasyNetQ(.Net Client for RabbitMQ)使用高级API(this link和This 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;方法。可能它是我应该找到的扩展方法,并从库中添加相关的类。
答案 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
);
}