当前位置: 首页 > 知识库问答 >
问题:

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

梅安平
2023-03-14

我成功地建立了一个话题交换,并且能够同时向几个消费者传递消息。

我还想向竞争对手传递信息,并继续使用主题交换。我了解到,使用相同的队列名称可以让消费者竞争消息。然而,我可能弄错了,因为我无法使它工作。

为同一主题的多个侦听器设置:

    < li >申报话题交流 < li >对于每个侦听器,用自动生成的名称声明一个新队列 < li >用给定的主题路由关键字将此队列绑定到上面的交换

如何将相互竞争的消费者安排到同一个主题?

甚至可以进行主题交流吗?

谢了。

共有2个答案

赫连俊悟
2023-03-14

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

    < li >外部交流是主题交流。 < li >内部交换是绑定到客户端命名队列的扇出交换。 < li >外部交换通过包含通配符的路由关键字绑定到内部交换。
徐嘉勋
2023-03-14

让我们先回顾一下几点。

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

其次,主题交换允许将队列与路由键“模式”绑定。因此,术语主题在“主题交换”的上下文中是有效的。

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

多个使用者/同一路由密钥:这是您希望多个使用者都使用具有相同路由密钥(或在 Topic Exchange 的情况下使用相同的路由密钥模式)的消息的地方。这实际上是可行的。只需执行以下操作:

  1. 声明您的主题交换
  2. 声明具有某个名称的队列
  3. 使用所需的路由键模式将该队列绑定到主题
  4. 创建多个使用者并让他们侦听同一队列。

将会发生的是RabbitMQ将会以循环方式向您的用户进行负载平衡。这意味着所有消费者将从同一队列中消费。但是请记住,在这种情况下,理论上一条消息可能会被传递多次。

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

 类似资料:
  • 我已经用MassTransit实现了一个简单的发布者/使用者集,我想让使用者从同一个队列中读取消息。但是,当我运行它时,我看到很大一部分消息被发送到错误队列,而不是被消耗。从我看到的讨论(所以,论坛)来看,对于RabbitMQ来说,这应该非常非常简单(只需指向相同的队列),但它并不起作用。是否有应该设置的附加配置? 这是我的出版商 还有我的消费者

  • 例如生产比较慢,而消费比较快,就会导致消费者消费到错误数据 package main import ( "fmt" "math/rand" "sync" "time" ) // 创建一把互斥锁 var lock = sync.Mutex{} // 定义缓冲区 var sce []int = make([]int, 10) // 定义生产者 fun

  • 我是AMQP的新手,正在尝试为RabbitMQ系统制定一个通知架构。 我想要一个主题交换(通知交换,比方说),特别是因为我想灵活地使用主题交换附带的路由密钥和队列,以及将来扩展该主题的更多选项。不过,我可能是错的,因为... 我还想让两个或更多的消费者使用每个通知。作为基线,我希望发布的每个通知都在数据库中结束。此外,我希望每个通知都可以由客户端应用程序使用(例如,web应用程序使用并进一步通过套

  • 我正在寻求一些关于如何最好地配置我的rabbitMQ交换的建议。 我试着用循环系统的方法来交换话题。每个使用者都有自己的(唯一的)命名队列连接到主题交换。我希望交换为“相同”主题循环消息到每个使用者队列-比如。 我尝试了多个组合,但似乎只能同时将消息传递到使用者队列,这实际上意味着我要处理两次消息,每个使用者一次。 为了清楚起见,我还有一个扇出交换,我用它来“控制”消费者(启动、停止等)。这应该在

  • 我正在尝试使用Akka和Camel的竞争性事件消费者实现。我使用Akka 2.3.2和Camel 5.8.0。我正在将camel连接到ActiveMQ代理,并使用生产者从另一端生成消息。在以下代码中,EventManager是创建消费者池的主机,Event处理器是消息处理演员。 EventManager.java EventProcessor.java 我看到的问题是,消息似乎被单个参与者使用,而

  • 我有一个场景,我需要执行一系列流程,每个步骤都在独立的应用程序中完成和扩展。我正在为所有交换使用主题交换。当前拓扑如下所示: P- 我们正在“版本化”队列,以处理可能影响消息结构的需求更改。绑定可能如下所示: 步骤1。exchange绑定到步骤1。v1。使用绑定键step1排队。v1 步骤1。exchange绑定到步骤1。v2。使用绑定键step1排队。v2级 还有其他与版本无关的绑定模式也使局部