2017-02-21 145 views
0

我一直在寻找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中只有一个会捡起并处理它,而不是一个来自每个集群,就像我正在寻找的那样。如果我使用一个主题,那么每个集群中的每个实例都会得到一条消息,所以它看起来并不是我正在寻找的。

就是这样。思考?提前致谢!

+0

如果您正在使用的Weblogic为您EE服务器和MDB为你的听众,那么你可以使用的主题,并指定“每一个申请复制”来实现你想要的。 “https://docs.oracle.com/cd/E17904_01/web.1111/e15493/d​​ist_topics.htm#WLMDB10081 – ramp

回答

0

我们用主题来解决这个问题。因此,而不是JMS队列使用JMS主题。让所有群集上的所有Web应用程序都订阅此主题。我们也有一个编写器组件,以便它们都可以写入该主题。

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

Cluster B: 
webapp1 --> StatusTopic (JMS Topic) 
webapp2 --> StatusTopic (JMS Topic) 
相关问题