2017-08-14 6 views
0

私は3つのサービスがあり、それらはすべてJGroup UDPチャネルを介して互いに接続されています(JGroupsはそれらの間でメッセージをブロードキャストできます):マイクロサービス内のブロードキャストメッセージを複数のインスタンスでブロードキャストします。

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

サービスごとに1つのインスタンスしかない場合は、すべてが問題ありません。しかし、例えば、私がサービスCの2つのインスタンスを持っている場合、それらの両方がイベントを受け取り、両方が独自のプロシージャを実行し、結果がデータベースに複製されます(値を2回加算します)。

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

これを管理する方法はありますか。

答えて

2

(まだ作成されていない場合)ラビットMQでは各microserviceため

を別々のキューを作成し、各キューは、すべてのメッセージをreacieveますので、ファンアウト交換を使用しています。

単一のマイクロサービスの複数のインスタンスが同じキューにバインドされている場合、1つのインスタンスだけがそのキューからメッセージを選択できます。キューのラウンドロビンの性質。

0

RabbitMQのような追加サービスを使用できない場合は、ブロードキャストする前にメッセージヘッダーにhost-id(Cインスタンス)を追加します。 Cインスタンスは、そのIDが処理されるヘッダーに存在する場合、ヘッダーをチェックします。

このメカニズムでは、各インスタンスが実行中の他のインスタンスの正確な情報を持っている必要があります。

さらに、Cインスタンス間の負荷分散によって改善することができます。

関連する問題