首页 > 解决方案 > 在 RabbitMq 的消息列表器中获取 queueName

问题描述

我在循环中创建多个消费者,我可以通过它来监听多个队列。这种方法的问题是我能够从不同的队列中获取事件,但是所有队列都使用相同的消费者,因此很难识别该事件发生在哪个队列中。如果我能在消费者部分下获得队列名称会很好。

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

标签: asp.netasp.net-corewebsocketrabbitmqrabbitmq-exchange

解决方案


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);
                };

推荐阅读