2016-11-30 8 views
0

同じイベントに対して2種類のワーカーがあります。AMQPとファンアウトとダイレクト交換を混ぜる

メッセージは私の労働者のうちの1人にしか発送されません(「直接」取引所など)。しかし、他の労働者はすべてメッセージを処理する必要があります(ファンアウトのような)。

説明が少し難しいですが、そのアイデアはここにあります。そして、おそらく次のスキーマは私が望むものを理解するのに役立ちます。

Architecture I would like to have

あなたは解決策を持っていますか?

敬具、 ベン

答えて

0

あなたの最良のオプションは、あなたの交換とあなたのキュー間で複数のバインディングとルーティングキーを使用することです。

ファンアウトではなく、直接またはトピック交換をお勧めします。

は、上記のあなたの例のイメージをモデル化するために、あなたの構成は次のようになります。

| exchange | routing key | queue | 
|----------|-------------|---------| 
| some.ex | type.1  | queue.1 | 
| some.ex | type.1  | queue.2 | 
| some.ex | type.1  | queue.3 | 
| some.ex | type.2  | queue.4 | 
| some.ex | type.2  | queue.5 | 

は基本的に、あなたは、キューごとにルーティングキーと労働者一人当たりのキューを持っている必要があります。


交換、キュー、バインディングについてもう少し詳しく読んで、いつ使用するのかを理解することができます。私はこれをカバーするいくつかの電子ブックを(他のRMQの使用シナリオと共に)https://leanpub.com/u/derickbailey

1

あなたが正しく理解していれば、 "type-2"は、すべてがイベントを受け入れるべきである複数のハンドラ(ログハンドラのような)として扱うことができます。

私が正しいとすれば、2つのキュー(交換)を連結することができます。 exchange1 - fanout - すべての "type-2"(ロガー)はここで待機しますので、すべてのイベントを取得します exchange2 - direct - すべての "type-1"がここで待機するので、イベントは1人だけです。

トリック - "exchange1"でリッスンしているコンシューマーが "exchange2"にもパブリッシュされていることを確認する必要があります。

+0

ちょっとPauwelyn、私は実際にそれが質問に答えると思うが、私は間違いなくあなたのポイントを得る。ありがとう!! – user7412510

関連する問題