JMS pub子多个侦听器,在分布式应用程序中具有相同主题的相同订阅ID

时间:2016-09-06 17:58:37

标签: java jms jms-topic

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

  1. 所有实例都会获得相同的JMS消息吗? (重复交易发生在申请中)
  2. 只有一个实例会收到消息而实例的其余部分都不会收到消息吗?
  3. 如果问题2的答案为“是”。同一个实例会一直得到消息吗?

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

  5. 我想在分布式应用程序中实现JMS pub sub而不会出现重复消息。如果我的问题不明确,请解决我的疑问。让我知道我会提供更多细节。

1 个答案:

答案 0 :(得分:0)

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

2)否

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

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

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