Невозможно реализовать множественный обработчик для потребителя в 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
                      );
            }
Другие вопросы по тегам