2016-07-30 3 views
1

Rubyで書かれたアプリケーションがあり、複数のスレッドがそれぞれリモートのAMQPエンドポイントに要求を送信します。これらのスレッドは、新しいタスクを実行する必要があるときに、時々生成されます。RabbitMQ:メッセージをスレッドにルーティングする

リクエストに応答を送信するためにスレッドごとに一時的な排他的キューを使用すると、このRubyサービスで受信メッセージを処理するコードを書くのが容易になります。キューは、関連するチャネルが閉じられるとすぐに削除され、目的が終了した後には固執しません。私はすべての考えることができる

選択肢は、リスナー・スレッドはRubyのサービスにすべての着信メッセージ/応答を受け取る1つ以上のキューに耳を傾け、その後、いくつかのメッセージ識別子を使用して待機しているスレッドにこれらのメッセージをルーティングする必要があります。これはもっと複雑に思え、必要なセマンティックルーティングにはRabbitMQを使用できません。

最初のモデルはAMQP通信の実行可能なモデルですか?このケースを処理するためのより良いパターンはありますか?

答えて

2

答えは、主に

あなたは指定されたキューが削除されたときに、メッセージを失うことを気にしない場合は、あなたのユースケースに依存し、その後、最初のオプションで結構です。

メッセージが処理されるまで待ち行列にくっつく必要がある場合は、メッセージが格納されている耐久性のあるキューが必要です。

スレッドごとに待ち行列を必要とせず、rabbitmqを使用します。

ただし、スレッドごとにチャンネルを使用する必要があります。

これは、スレッドごとにチャネルを持つことができ、問題のない同じ(または別の)キューから複数のチャネルを消費できることを示しています。

チャンネルを1つのスレッドに限定している限り、消費しているキューに関して必要なものはすべて実行できます。

関連する問題