Невозможно реализовать множественный обработчик для потребителя в RabbitMQ с использованием клиента EasynetQ для.Net
Я использую решение Rabbitmq Queue, и у меня есть 4 очереди и один потребитель. я хочу, чтобы мой потребитель использовал все эти очереди и предоставлял отдельный обработчик для каждой из них.
Я прогуглил это и обнаружил, что Rabbitmq и EasyNetQ (.Net Client для RabbitMQ) предоставляют эту функцию с помощью Advanced 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<>. Может быть, это метод расширения, который я должен найти и добавить связанный класс из библиотеки.
1 ответ
После некоторого поиска и тестирования многих методов я написал полный синтаксис своего кода и проигнорировал подсказку об ошибках компилятора, а компилятор C# принял метод 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
);
}