2011-05-13 23 views
0

彼らはメッセージを受け取ったときに何かをします。今私は別の種類の仕事につけられた異なる労働者を求めています。これはトピックの方法で各メッセージのルーティングキーを使用して指定できます。消費者側でkombuでちょっと遊んでいるのですが、同じキュー名を指定してもルーティングキーが異なるとメッセージをフィルタリングできません。たとえば、「#」のある消費者と「foo。#」のある消費者が同じキュー名を使用している場合、後者の消費者は元の消費者とのキューでラウンドロビンを処理します。これは期待ですか?私は両方の消費者を同じマシンで実行しています。AMQP交換タイプ

2)したがって、各コンシューマに固有のキュー名を作成し、今回は各コンシューマがルーティングキーを要求するだけです。しかし、それらは別個の待ち行列なので、私は単なる消費者以上の仕事をするかもしれません。例えば、消費者1がキー '#'を有し、消費者2が 'foo。#'を有する場合、消費者2がメッセージを受信(および受信)すると、消費者1も同じメッセージを受信します。これは私が望むものではありません。私はただ1人の消費者にメッセージを受け取ることを欲しがっています。 「タスクマネージャー」を書かずにこれを達成できる方法はありますか?

歓声、

答えて

0

は、ほとんどの人にとって、それはあなたが完全にどのようにAMQP作品を理解するまで、ちょうどすべてのための話題交換を使用するのが最適です。キューの正しいバインディングキーを選択するだけで、ファンアウトと直接動作を得ることができます。たとえば、バインディングキーに「#」を使用すると、そのキューは直接交換に接続されているかのように動作します。同じルーティングキーに2つ以上のキューをバインドすると、それらのキューはファンアウト交換の場合と同じように機能します。

ラウンドロビンの動作が必要です。両方のタスクは全く同じキューに登録されています。バインディングキーが異なるという事実は、すべてを混乱させるだけです。おそらく最後にバインドする人は、すべてのキューユーザーのバインディングキーを設定します。それをしないことをお勧めします。私は、いくつかのキューが同一のワーカーコードの4〜15のインスタンスを持ち、メッセージを同じキューから取り出し、Webサービスからデータを収集するシステムを構築します。私は最終的にはパフォーマンスのために必要ではなかったが、異なるCPUで稼動しているワーカを持っていた。

バインディングキーにワイルドカードを使用する理由がわかりません。 AからHという名前の8つのコンシューマーがいて、それぞれが異なる仕事をしている場合は、ルーティングキーwork.Aを使用してメッセージを公開し、同じバインディングキーwork.Aを使用して作業します。そうすれば、ワーカーBのインスタンスが複数ある場合、それらはすべてwork.Bにバインドされ、メッセージは2回配信されません。

また、メッセージを処理した後に確認しないと、最終的にキューに戻って再び配信されます。うまくいけば、メッセージをうまく処理した後、あなたは嫌な思いをしています。タスクマネージャーは必要ありません。すべてのAMQPノブを理解するだけです。