【问题标题】:JMS pub sub multiple listener with same subscription id for same topic in distributed application分布式应用程序中相同主题的 JMS pub sub 多个侦听器具有相同的订阅 id
【发布时间】:2017-01-14 06:34:12
【问题描述】:

我正在开发分布式应用程序(4 个实例正在运行并由负载平衡控制。每个实例都是相同的。一个实例不会依赖另一个实例,每个实例都会执行所有操作)。应用程序需要监听一个名为“结果”的 JMS 主题。 4 个实例将使用相同的订阅 ID 收听相同的主题。我正在使用 Camel pub sub。会发生什么,

  1. 所有实例都会收到相同的 JMS 消息吗? (应用中出现重复交易)
  2. 是否只有一个实例会收到消息,而其他实例不会收到消息?
  3. 如果问题 2 的答案是“是”。同一个实例会一直收到消息吗?

  4. 如果问题 3 的答案是“是”。另一个实例是否会收到消息,因为该实例已关闭?

我想在分布式应用程序中实现JMS pub sub而不重复消息。如果我的问题不清楚,请解决我的问题。让我知道我会提供更多详细信息。

【问题讨论】:

    标签: java jms jms-topic


    【解决方案1】:

    1) 是的,所有实例都将获得已发布消息的副本。这就是发布/订阅消息传递模式。

    2) 没有

    3) & 4) 无效,因为所有消费者都获得了已发布消息的副本。

    JMS 2.0 规范描述了Shared Subscription 的概念,其中多个订阅者/消费者共享(也称为负载平衡)发布在一个主题上的消息。所有消费者都使用相同的订阅 ID。

    如果您的消息传递提供程序还不支持 JMS 2.0,那么您可以创建单个持久订阅并提供一个队列名称,该主题的所有已发布消息都将路由到该队列名称。然后,您的所有消费者都可以从该队列中获取消息。通过这种方式,消息可以分布在多个消费者之间。因为它是一个队列,所以没有两个消费者会收到相同的消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-06
      • 2022-12-13
      • 2018-04-11
      • 1970-01-01
      • 1970-01-01
      • 2022-07-27
      • 2021-10-15
      • 2017-07-21
      相关资源
      最近更新 更多