我一直在寻找JMS解决方案,并且我(令人惊讶地)一直无法找到简单的答案。我可能正在寻找错误的东西,所以希望在stackoverflow上的社区可以提供帮助。多个集群正在侦听相同的JMS消息队列
我正在工作的应该是非常基本的:使用JMS在微服务集群中进行事件通知。设置很简单。假设我有3个集群,每个集群都有3个实例在不同的机器上运行在自己的EE服务器实例上,彼此分离。
Cluster A
A1, A2, A3
Cluster B
B1, B2, B3
Cluster C
B1, B2, B3
我有具有队列它们都收听到中央JMS服务器:
A1, A2, A3 |
B1, B2, B3 |<-------> JMS Queue (Q1)
C1, C2, C3 |
微服务实例A2处理请求并发布消息(M)到(Q1)。我想要发生的是,对于其他每个群集(B,C),该群集中的一个实例会挑选消息并为群集进行处理。只要每个群集只处理一次,那么哪个实例选择它并不重要。因此,它看起来像
A2 | ---> publish (M) ----> JMS Queue (Q1)
B2 |
| <---- (M) <----- JMS Queue (Q1)
C1 |
这似乎是一个很常见的,几乎是默认设置,每个人都需要。但到目前为止,我在排队的工作方式中发现,一旦(M)发布到(Q1),那么B1,B2,B3,C1,C2,C3中只有一个会捡起并处理它,而不是一个来自每个集群,就像我正在寻找的那样。如果我使用一个主题,那么每个集群中的每个实例都会得到一条消息,所以它看起来并不是我正在寻找的。
就是这样。思考?提前致谢!
如果您正在使用的Weblogic为您EE服务器和MDB为你的听众,那么你可以使用的主题,并指定“每一个申请复制”来实现你想要的。 “https://docs.oracle.com/cd/E17904_01/web.1111/e15493/dist_topics.htm#WLMDB10081 – ramp