2017-08-14 64 views
0

我正在使用微服務,假設我有3個服務,並且它們都通過JGroup UDP通道相互連接(JGroups可以在它們之間廣播消息):在微服務中廣播消息並在多個實例中運行一次

---   --- --- 
| A | --msg--> | B || C | 
---   --- --- 

如果我只有一個服務的實例,一切都很好。但是,例如,如果我有兩個服務實例C,它們都會收到該事件,並且它們都將運行自己的過程,並且結果將在數據庫中重複(總計兩次)。

---   --- --- --- 
| A | --msg--> | B || C || C | 
---   --- --- --- 

有什麼辦法可以管理嗎?

回答

2

創建每個微服務一個單獨的隊列(如果尚未創建)

兔MQ,使用扇出交易所因此每個隊列將reacieve所有消息。

現在,如果單個微服務的多個實例綁定到相同的隊列,那麼只有一個實例將能夠從該隊列中選擇一條消息。由於隊列的循環性質,

0

如果您不能使用像RabbitMQ這樣的附加服務,請在廣播之前在郵件標題中添加主機標識(C實例)。 C實例檢查頭,如果它的ID存在於它將處理的頭中。

該機制要求每個實例都有其他正在運行的實例的準確信息。

您可以通過C實例之間的負載平衡進一步改進。

相關問題