RabbitMQ - 主题交流和竞争消费者

时间:2016-09-16 15:32:39

标签: c# .net rabbitmq

我成功设置了主题交换,我可以同时向多个消费者发送消息。

我还想向竞争消费者传递信息并继续使用主题交换。我读到使用相同的队列名称使消费者能够竞争消息。但是,我可能会弄错,因为我无法使其发挥作用。

为同一主题设置多个听众:

  • 声明主题交换
  • 对于每个侦听器,声明一个具有自动生成名称的新队列
  • 使用给定主题路由键
  • 将此队列绑定到上述交换

如何将竞争消费者设置为同一主题?

甚至可以使用主题交换吗?

感谢。

2 个答案:

答案 0 :(得分:3)

让我们首先回顾几点。

首先,请记住,在RabbitMQ中,您总是从队列中消耗。交换只是你的门户,你不能直接从它们消费。

其次,Google Sheets API允许使用路由密钥"模式"来绑定队列。因此,术语主题在"主题交换"的上下文中有效。

现在这是我从你的问题中理解的:

多个消费者/相同的路由键: 这是您希望多个消费者使用相同路由密钥(或主题交换中的相同路由密钥模式)消费消息的地方。这实际上是可行的。就这样做:

  1. 声明您的主题交换
  2. 声明一个名称为
  3. 的队列
  4. 使用所需的路由密钥模式将该队列绑定到您的主题
  5. 创建多个消费者并让他们听同一个队列。
  6. 将会发生的事情是,RabbitMQ将在循环问题中为您的消费者带来负载平衡。这意味着所有消费者将使用相同的队列。但请记住,在这种情况下,理论上可能会多次传递单个消息。

    您正在做的是创建多个队列并且每个队列有一个消费者。这意味着进入交换的每条消息都将在所有队列中重复。最终结果是消息被多次处理。

答案 1 :(得分:0)

我通过使用交换到交换绑定解决了这个问题。

  1. 外部交换是主题交换。
  2. 内部交换是绑定到客户端命名队列的扇出交换。
  3. 外部交换使用包含通配符的路由键绑定到内部交换。