我一直在尋找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