[解決済み】RabbitMQとチャネルとコネクションの関係
質問
その RabbitMQのJavaクライアント は以下の概念を持つ。
-
Connection
- RabbitMQサーバインスタンスへの接続 -
Channel
- ??? - Consumer thread pool - RabbitMQサーバーのキューからメッセージを消費するスレッドのプールです。
- キュー - メッセージを FIFO 順序で保持する構造体
関係性を理解したい そしてもっと重要なのは は、その アソシエーション の間にある。
-
がどういうものなのか、まだよく分かっていないんです。
Channel
は、これがパブリッシュとコンシュームのための構造体であり、オープンコネクションから作成されるという事実以外には、ありません。もし誰かが、"Channel" が何を表しているのか説明してくれれば、いくつかのことをクリアにするのに役立つかもしれません。 - ChannelとQueueの関係はどうなっていますか?同じチャンネルで複数のキューに通信できるのでしょうか、それとも1対1でなければならないのでしょうか?
- キューとコンシューマプールの関係はどうなっていますか?複数のコンシューマーが同じキューに登録できますか?複数のQueueを同じConsumerに消費させることはできますか?それとも1:1の関係ですか?
解決方法は?
-
A
Connection
はメッセージブローカーへの実際の TCP 接続を表します。Channel
は、その内部の仮想接続(AMQP接続)です。こうすることで、ブローカーに TCP 接続の負荷をかけずに、アプリケーション内部で必要なだけの (仮想) 接続を使用することができます。 -
を1つ使用することができます。
Channel
を全てに使用します。しかし、複数のスレッドがある場合は、別のChannel
を各スレッドで使用します。JavaクライアントAPIガイドのチャンネルスレッドセーフティ :
チャンネルインスタンスは、複数のスレッドで使用しても安全です。リクエストは チャンネルはシリアライズされ、1つのスレッドのみが コマンドを一度に実行することができます。それでも、アプリケーションは 同じチャネルを複数のスレッドで共有するのではなく、スレッドごとにチャネルを使用することで 複数のスレッドで
とは直接の関係はありません。
Channel
とQueue
. AChannel
は、ブローカーに AMQP コマンドを送信するために使用します。これはキューの作成などにもなりますが、これらの概念は関連付けられていません。 -
各
Consumer
は、コンシューマースレッドプールから割り当てられた独自のスレッドで実行されます。複数のコンシューマが同じ Queue に登録されている場合、ブローカはラウンドロビン方式でそれらのコンシューマに等しくメッセージを分配します。以下を参照してください。 チュートリアル2:「ワークキュー」。 .また、同じ
Consumer
を複数のQueueに設定することができます。 コンシューマはコールバックとして理解することができます。これは、Consumer がバインドされている Queue にメッセージが到着するたびに呼び出されます。Java Client の場合、各コンシューマーはメソッドhandleDelivery(...)
があり、これがコールバックメソッドを表します。通常行うのはDefaultConsumer
をオーバーライドしhandleDelivery(...)
. 注意:同じ Consumer インスタンスを複数のキューにアタッチした場合、このメソッドは異なるスレッドから呼び出されることになります。そのため、必要に応じて同期をとるようにしてください。
関連
-
[解決済み] RabbitMQ / AMQP:単一のキューで、同じメッセージに対して複数のコンシューマー?
-
[解決済み] Java - JTextFieldが空かどうかを確認する
-
[解決済み] プロトコルハンドラの初期化に失敗しました。
-
[解決済み] javacが「using unchecked or unsafe operations」という警告を出す原因は何ですか?
-
[解決済み] Java の条件付きコンパイル:コードチャンクをコンパイルしないようにするには?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] StringBuilderとStringBufferの違いについて
-
[解決済み】なぜPostgreSQLのようなデータベース上でRabbitMQのようなメッセージブローカーが必要なのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Jdbctemplate の文字列に対するクエリです。EmptyResultDataAccessException: 不正な結果サイズ:期待値1、実際0
-
[解決済み] ボタンでTextFieldをクリアする(Java)
-
[解決済み] javaで部分クラスを実装する方法
-
[解決済み] javax.mail.MessagingException: SMTPホストに接続できませんでしたか?
-
[解決済み] raw 型のメンバへのアンチェックの呼び出し
-
[解決済み] 型の不一致:ArrayListからListへの変換ができない
-
[解決済み] スリーピング中のスレッドが割り込まれ、データベースへの接続が失われる
-
[解決済み] javaでメソッドを呼び出すプログラムのエラー修正
-
[解決済み] java swingアプリケーションでJCEがプロバイダBCを認証できない
-
[解決済み] java.io.IOException。DER長の短い読み取り