【问题标题】:RabbitMQ Fanout Exchange (VirtualTopic Equivalent)RabbitMQ 扇出交换(VirtualTopic 等效)
【发布时间】:2014-04-13 12:16:29
【问题描述】:

出于几个原因,我正在考虑用 RabbitMQ 替换 ActiveMQ。我目前有多个服务,每个服务都能够发布事件(并且它们将这些事件发布到 AMQ 中的特定 VirtualTopic)。每个服务还能够使用来自其他服务的消息。消费者被设置为以消费者的身份订阅 VirtualTopic 上的队列。

这让我能够将消息发送到多个队列(类似主题的功能),同时保持队列的优势(负载平衡和持久性)。

这似乎大致相当于 RabbitMQ 的扇出交换。但是,我发现 ActiveMQ 中非常有用的部分是生产者不需要了解消费者。它只是发布到虚拟主题。似乎在 RabbitMQ 中,当创建交换时,我需要一个明确的队列来发布该消息。

tl;dr

RabbitMQ 中是否有任何与 ActiveMQ 的虚拟主题等效的路由方案,这样我就可以向某个主题生成消息,这些消息被分发到从该虚拟主题创建的任何队列中,而无需硬编码路由计划在 RMQ 的某个地方?

【问题讨论】:

  • 作为旁注,您能解释一下为什么要从 ActiveMQ 迁移到 RabbitMQ 吗?我正在考虑朝另一个方向发展,主要是为了能够使用 AWS 托管的 ActiveMQ 实例,我很想知道您是否对 ActiveMQ 有任何影响。
  • ActiveMQ 的操作负担远远超过了它的实用性。我们没有使用 ActiveMQ 提供的重要组件,而且在 ActiveMQ 中处理复制/集群更加痛苦。另外,我们过去曾被无法解释的维护噩梦所困扰。老实说,我确信它已经走了很长一段路,而且我确信 AWS 的产品比我们所能提供的更稳定。

标签: jms rabbitmq activemq


【解决方案1】:

在发布这个问题后我意识到这样做非常简单(不知道为什么我以前从未想过它)。

我从错误的方向看它,想知道如何自动让发布者为收件人配置队列 - 这不是解决这个问题的正确方法。

相反,我让订阅者在启动时将自己绑定到发布者用户的交换,这在我正在寻找的控制反转中提供(发布者不需要了解他们的消费者的任何信息)。

【讨论】:

  • 我想知道在 ActiveMQ 中 RabbitMQ 等效于 Topic,但我仍然没有理解 Fanout Exchange 如何做同样的事情。在 ActiveMQ 中,Topic 可以有多个订阅者。在 RabbitMQ 中,Fanout Exchange 可以广播到多个队列。但是,如果这些接收队列中的任何一个有多个消费者,那么这些消费者中只有一个可以从该队列中获取消息。这是否意味着 Fanout Exchange 仅在每个队列仅由一个消费者/订阅者消费时才能像真正的 Topic 一样工作?
  • 在 RabbitMQ Fanout 交换中,交换本身可以被视为一个主题。任何发布到扇出交换(主题)的消息都会通过队列路由到多个连接的订阅者
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
  • 1970-01-01
  • 1970-01-01
  • 2012-10-19
  • 2013-02-19
  • 1970-01-01
相关资源
最近更新 更多