Jakarta ee 侦听同一JMS消息队列的多个集群

Jakarta ee 侦听同一JMS消息队列的多个集群,jakarta-ee,queue,jms,messaging,microservices,Jakarta Ee,Queue,Jms,Messaging,Microservices,我一直在寻找一个JMS解决方案,但(令人惊讶的是)没有找到一个简单的答案。我可能是在寻找错误的东西,所以希望stackoverflow社区能够提供帮助 我的工作应该是非常基本的:跨微服务集群使用JMS进行事件通知。设置很简单。假设我有3个集群,每个集群有3个彼此独立的实例,运行在不同机器上各自的EE服务器实例上 Cluster A A1, A2, A3 Cluster B   B1, B2, B3 Cluster C   B1, B2, B3 我有一个中央JMS服务器,它有一个他们都要听

我一直在寻找一个JMS解决方案,但(令人惊讶的是)没有找到一个简单的答案。我可能是在寻找错误的东西,所以希望stackoverflow社区能够提供帮助

我的工作应该是非常基本的:跨微服务集群使用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 |
A1、A2、A3|
B1、B2、B3 | JMS队列(Q1)
C1,C2,C3|
微服务实例A2处理一个请求并将消息(M)发布到(Q1)上,C-该集群中的一个实例拾取消息并为集群进行处理。显然,哪一个实例拾取消息并不重要,只要每个集群只处理一次消息。因此

A2 | ---> publish (M) ----> JMS Queue (Q1)


B2 |
   | <---- (M) <----- JMS Queue (Q1)
C1 |
A2|-->发布(M)--->JMS队列(Q1)
B2|

|我们使用topic解决了这个问题。因此,不要使用JMS队列,而是使用JMS主题。让所有集群上的所有web应用程序订阅此主题。我们还有一个writer组件,这样所有人都可以编写主题

Cluster A:
webapp1 --> StatusTopic (JMS Topic)
webapp2 --> StatusTopic (JMS Topic)

Cluster B:
webapp1 --> StatusTopic (JMS Topic)
webapp2 --> StatusTopic (JMS Topic)
请参阅本网站:

作为我们使用的解决方案

集群连接工厂

这有助于使多个使用者来自同一队列(在使用者之间提供负载平衡)

java.naming.provider.url


我们必须在其上分配消费者的动态URL。

如果您使用Weblogic作为EE服务器,使用MDB作为侦听器,则可以使用主题并指定“每个应用程序一个副本”来实现所需的内容不幸的是,这似乎不能解决我上面描述的情况