【问题标题】:ActiveMQ consumer groups on Pub/Sub topics发布/订阅主题的 ActiveMQ 消费者组
【发布时间】:2020-04-30 13:41:46
【问题描述】:

我对 ActiveMQ 很陌生,我想知道是否可以针对以下场景进行设置:

服务 A 和 B 订阅 Pub/Sub 主题。这个主题我用于事件发送,所以感兴趣的服务可以对它做出反应。

现在,如果我想扩展服务 A,请再添加一个实例。如何确保两个实例不会处理相同的事件? (最终创建重复数据)。

是否有可能在 ActiveMQ 中实现这一点?如果是,怎么做?

谢谢。

【问题讨论】:

    标签: jms activemq publish-subscribe


    【解决方案1】:

    如果您使用的是 JMS,那么这个场景确实需要 共享 主题订阅,它们是 added in JMS 2.0。 ActiveMQ 5.x 不支持 JMS 2,但 ActiveMQ Artemis(下一代 ActiveMQ 代理)支持 JMS 2,因此您应该使用它。

    【讨论】:

      【解决方案2】:

      Vitor Villar,您还可以在 ActiveMQ 5.x 中使用虚拟主题 虚拟主题实际上是消息传递的圣杯——您发布到主题并从队列中消费。

      1. 生产者和消费者未链接到同一个地址(队列或主题名称)
      2. 消费者可以使用所有消费模式——多线程、活动-待机和消息组

      参考:Virtual Topic

      【讨论】:

      • 虚拟主题是一种潜在的解决方案,但它们是 ActiveMQ 5.x 独有的。换句话说,它们不是便携式的。如果您想要一个基于标准的、可移植的解决方案,您可以指望它能够与其他 (JMS2) 代理一起使用,那么共享主题订阅是一个很好的解决方案。我已经看到很多用户围绕虚拟主题构建他们的架构,因为它们很强大(正如您所注意到的),但随后他们被困在 ActiveMQ 5.x 上。鉴于 ActiveMQ Artemis 计划取代 ActiveMQ 5.x,因此对 5.x 特定架构的投资可能并不明智。
      • 目前我认为虚拟主题是最好的选择。 ActiveMQ Artemis 中的 Virtual Topic 等价于什么?
      • 如果您想要基于标准规范的解决方案,那么我会推荐 JMS 2 的共享主题订阅,正如我在回答中已经描述的那样。如果您现在在 5.x 中实现基于虚拟主题的解决方案,那么您可以migrate it to ActiveMQ Artemis later。 ActiveMQ Artemis 的底层架构已经支持这些语义。一般来说,它比 5.x 的主要以 JMS 为中心的配置更强大、更灵活。
      • 两件事——虚拟主题模式不是 ActiveMQ 5.x 独有的。 IBM MQ 支持完全相同的模式。另外,它怎么不符合标准?生产者和消费者代码都写入 JMS API。
      • 我关于虚拟主题不是标准的观点与其说是遵守 JMS API,不如说是 行为 是非标准的。虚拟主题允许 JMS 应用程序发送到主题并从队列中消费。您可以使用 JMS API 来执行此操作,但该行为不符合 JMS。我了解其他一些经纪人使用类似的语义。这甚至可以在使用 FQQN 的 ActiveMQ Artemis 中实现。但是,它不容易移植到另一个不采用这种语义的 JMS 提供者。使用 JMS 2 可以解决这个问题。
      猜你喜欢
      • 2017-02-20
      • 1970-01-01
      • 2017-07-17
      • 1970-01-01
      • 2016-06-17
      • 1970-01-01
      • 2017-07-31
      • 1970-01-01
      • 2018-03-14
      相关资源
      最近更新 更多