我正在开发分布式应用程序(4个实例正在运行并由负载平衡控制。每个实例都是相同的。一个实例不依赖于另一个实例,每个实例都将执行所有操作)。应用程序需要侦听一个名为“result”的JMS主题。 4个实例将使用相同的订阅ID侦听相同的主题。我正在使用Camel pub sub。会发生什么,
如果问题2的答案为“是”。同一个实例会一直得到消息吗?
如果问题3的答案为“是”,那么另一个实例是否会收到该消息,因为该实例已关闭?
我想在分布式应用程序中实现JMS pub sub而不会出现重复消息。如果我的问题不明确,请解决我的疑问。让我知道我会提供更多细节。
答案 0 :(得分:0)
1)是的,所有实例都将获得已发布消息的副本。这就是发布/订阅消息传递模式。
2)否
3)& 4)无效,因为所有消费者都获得已发布消息的副本。
JMS 2.0规范描述了Shared Subscription
的概念,其中在主题上发布了多个订阅者/消费者共享(a.k.a负载平衡)消息。所有消费者使用相同的订阅ID。
如果您的消息传递提供程序尚不支持JMS 2.0,那么您可以创建单个持久订阅并提供队列名称,该主题上的所有已发布消息都将路由到该队列名称。然后,您的所有消费者都可以从该队列中获取消息。这样,消息可以分布在多个消费者身上。由于它是一个队列,没有两个消费者会得到相同的消息。