分布式应用中相同订阅ID和主题的JMS发布-订阅多个监听器

3
我正在开发一个分布式应用程序(有4个实例通过负载平衡器运行和控制,每个实例都是相同的。一个实例将不依赖于另一个实例,并且每个实例都将执行所有操作)。该应用程序需要监听名为"result"的JMS主题。4个实例将使用相同的订阅ID监听同一主题。我正在使用Camel pub sub。下面是问题:
1. 所有实例会收到相同的JMS消息吗?(应用中会出现重复事务) 2. 只有一个实例会收到消息,剩余的实例不会收到消息吗? 3. 如果问题2的答案是“是”,那么同一个实例是否会一直收到消息直到它关闭?
如果问题3的答案是“是”,那么当该实例关闭时,另一个实例是否会接收到该消息?
我想在分布式应用程序中实现JMS pub sub而不产生重复消息。请帮我解决这个问题,如果我的问题不清楚,请让我知道,我将提供更多细节。
1个回答

1

1) 是的,所有实例都会收到已发布消息的副本。这是发布/订阅消息模式。

2) 不是。

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接