【问题标题】:Can we have multiple subscribers for RabbitMQ queue?RabbitMQ 队列可以有多个订阅者吗?
【发布时间】:2017-02-20 17:45:08
【问题描述】:

我在我的 c# 控制台应用程序中有以下上标代码,用于从 RabbitMQ 队列中排出消息:

consumer = new EventingBasicConsumer(_channel);
consumer.Received += (o, e) =>
{
    //onMessageReceived()
};


consumer.Shutdown += (oo, oe) =>
{
    //Handle Subscribe event
};
_channel.BasicConsume(QueueName, false ,consumer);

我有两个运行此控制台应用程序的实例来模拟多个订阅者的情况。我总是向第一个订阅者发送消息,而第二个订阅者总是空闲的。 RabbitMQ 队列上的同一个队列可以有多个订阅者吗?

【问题讨论】:

  • 您是否尝试过发送更多消息,超过一位消费者可以处理的数量?尝试填满队列并启动订阅者后记,并检查订阅者中发生的情况。 RabbitMQ 中的一个队列可以有多个订阅者。

标签: c# rabbitmq


【解决方案1】:

是的,您可以,但如果控制台应用程序正在使用来自同一队列的消息,它们就会相互竞争。所以队列中的消息只会被其中一个消费。

如果您想让更多订阅者接收相同的消息,您需要为每个订阅者定义一个不同的队列,绑定到应该是 fanout主题(不是直接)。

更多信息herehere

【讨论】:

  • 删除这些队列的最佳方法是什么?如何知道客户端是否已断开连接?