2017-02-21 142 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) 
相關問題