Получить queueName в списке сообщений RabbitMq - PullRequest
0 голосов
/ 29 февраля 2020

Я создаю несколько потребителей в l oop, с помощью которых я могу прослушивать несколько очередей. Проблема в этом подходе заключается в том, что я могу получать события из разных очередей, но все очереди используют одного и того же потребителя, поэтому трудно определить, для какой очереди происходит это событие. Будет хорошо, если я получу имя очереди в разделе потребителей.

          consumer.Received += async (model, ea) =>
                {
                    var body = ea.Body;
                    var message = Encoding.UTF8.GetString(body);
                };

1 Ответ

1 голос
/ 29 февраля 2020

В переменной ea есть несколько интересных полей, вы проверяли, что?

ea.Exchange показывает, что это сообщение было опубликовано с биржи.

ea.RoutingKey показывает информацию о маршруте сообщение. вероятно, в нем есть имя очереди.

Кроме того, вы можете помещать свои заголовки в сообщение, когда вы их определяете.

IBasicProperties props = channel.CreateBasicProperties();
props.Headers.Add("queueName",  "myQueue1");
channel.BasicPublish(exchangeName,
                   routingKey, props,
                   messageBodyBytes);

и в функции потребителя вы можете прочитать их:

consumer.Received += async (model, ea) =>
                {
                    var name = ea.BasicProperties.Headers["queueName"];
                    var body = ea.Body;
                    var message = Encoding.UTF8.GetString(body);
                };
...