メッセージの送信にRabbitMQを使用する場合、基本的に交換、キュー、およびバインディングがあります。私は彼らのアイデアを理解してお互いにどのように関係しているのですが、私は誰が何をセットアップするのかよく分かりません。RabbitMQ:交換、キュー、バインディング - 誰が何をセットアップしますか?
基本的に私のアプリケーションには3つのシナリオがあります。
シナリオ1:ワン出版社、いくつかの労働者は、私が達成したい何
がキューにメッセージを送信する1つの成分であり、そのキュー内のアイテムを扱う複数のワーカープロセスがなければならない処理します。これは私にとっては非常に簡単です。次のようにセットアップは次のとおりです。
- 取引所:タイプ1の交換「直接」
- キュー:1キュー
- バインディング:メッセージがあるときはいつでもキューが為替
にバインドされています交換所に送信され、キューに引き渡され、ワーカープロセスはタスクを取得します。
すべてが耐久性があるものとします。
誰が何を設定しますか?私の意見では:
- プロデューサー
- プロデューサーは、キューを作成します為替作成します(現在実行中のワーカープロセスが存在しない場合があるとして、そして何の待ち行列がなかった場合、メッセージはそう失われる)
- プロデューサーが結合しないが、キューの交換機へ
- 消費者は単にキュー
右に聞きますか?
シナリオ2:ワン出版社、いくつかの加入者、揮発性メッセージ
2つ目のシナリオはかなり異なっています。基本的には、各メッセージが現在リッスンしているすべてのクライアントに送信されるパブ/サブシナリオです。クライアントがオフラインになると、メッセージはもう受信されず、どこにでも保存されません。これは次のセットアップを意味します
- 取引所:タイプ1つの交換「ファンアウト」
- キュー:n個のキュー、各消費者のための1
- バインディング:各キューは為替
誰が何を設定するのですか?私の意見では:
- プロデューサーは、(それが自身のキューであるとして、そしてプロデューサーは、メッセージに興味がある人は誰でも知っていることはできません)消費者は、キューを作成します
- 交換を作成
- 消費者はにそのキューのバインディングを作成します為替
- 消費者は、そのキュー
右に耳を傾けますか?
シナリオ3:ワン出版社、いくつかの加入者、耐久性のあるメッセージシナリオ2として
基本的には同じですが、消費者がオフラインになった場合、メッセージは失われてはなりません。私の意見では、これは何も変わるべきではありません - そうですか?
セットアップを実行するために使用できる第三者があります:外部管理者です。詳細については、別の質問へのこの回答を参照してください:http://stackoverflow.com/questions/6148381/rabbitmq-persistent-message-with-topic-echange/6155733#6155733 –
私は明示的にそれを書いていませんでしたが、システムは外部の管理者を必要とせずに自己完結型でなければなりません。 –