この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 2516|答える: 0

RabbitMQ:誰がキューと交換を作るのか

[リンクをコピー]
掲載地 2023/05/03 22:31:59 | | | |
翻訳

メッセージングはあらゆる分散システムの基本的な要素です。 生産者は任意の数の消費者にメッセージを送ることができ、消費者に関する情報を知る必要はありません。 これは真の非同期かつデカップリング通信にとって非常に役立ちます。



RabbitMQを使うと、上記の図は非常に基本的でありながら典型的な構造を示しています。 プロデューサーはスイッチにメッセージを送信します。 ルーティングロジックによれば、スイッチはメッセージをスイッチに割り当てられたキューに入れます。 より具体的には、ブロードキャストタイプのスイッチであれば、このメッセージのコピーは各キューに繰り返し送信されます。 消費者はその後、メッセージを受け取り処理できます。

上記の構造が生産者や消費者に成功するために重要な前提は、すべてのRabbitMQコンポーネント(キュー、スイッチ、バインディング)を事前に作成しなければならないことです。 コンシューマーはスイッチにメッセージを送信できません。スイッチが存在しなければ、存在しないキューからのメッセージを処理できません。

したがって、プロデューサー/コンシューマーがメッセージを送受信する前に、プロデューサー/コンシューマーの値がキュー、スイッチ、バインディング関係を作成することは理解に難しくありません。 それぞれの利点と欠点を見てみましょう。

1. 責任の区別



画像変換(1. プロデューサーがスイッチを作成する 2. コンシューマーがキューを作成し、そのキューをスイッチにバインドする)

生産者と消費者が完全に切り離すためには、理想的には生産者はスイッチに関する情報だけ(キュー情報は知らず)、消費者はキュー情報だけを知り(スイッチ情報は知らない)、 バインディング関係はスイッチとキューの関係を示します

一つの方法としては、プロデューサーがスイッチの作成を担当し、コンシューマーがキューを作成し、キューをスイッチにバインドするという形があります。 このデカップルメント方式の利点は、消費者がキューを必要とする場合、単にキューを作成し需要に応じてバインドするだけで済み、生産者がキューに関する情報を知る必要がないことです。 しかし、これは十分なデカップリングではありません。なぜなら、消費者がスイッチをバインドするために知っている必要があるからです。

2. 生産者がすべてを創造する

プロデューサーが稼働中であれば、スイッチ、キュー、バインディングなどの必要なコンポーネントをすべて作成するよう設定できます。 この方法の利点は、メッセージが失われないことです(キューはすでに作成されスイッチに割り当てられており、消費者が最初にキューを起動する必要がないため)。

しかし、これはプロデューサーがスイッチに紐付けるべきすべてのキューを知っていることを意味します。 これは高度に結合された方法です。 その理由は、新しいキューを追加するたびに、プロデューサーが再構成し展開してキューを作成・バインドする必要があるからです

3. 消費者がすべてを創造する

逆に、実行中に消費者が必要なスイッチ、キュー、バインディングを作成できるようにすることです。 前述の手法と同様に、この方法はコンシューマーが自分がキューに割り当てられているスイッチに関する情報を知っておく必要があるため、結合を生み出します。 スイッチの変更(名前の変更など)は、すべての消費者を再構成し、展開する必要があります。 大人数の列や消費者がいる場合、この複雑さは負担が大きいこともあります。

4. どちらも何も生み出さない

まったく異なるアプローチとして、生産者も消費者も必要な部品を作らないようにする。 代わりに、事前に管理者プラグインや管理者CLIのユーザーインターフェースを使って作成されます。 この方法は以下の利点に基づいています:

  • 生産者と消費者は完全に切り離すことができます。 生産者は取引所しか知らず、消費者はキューしか知りません。
  • これはデプロイメントパイプラインの一部として簡単にスクリプト化・自動化できます
  • 新しいキューの変更などは、既存の展開されたパブリッシャーや消費者に影響せずに追加できます


概要

分散システムでは、非同期メッセージはデカップリングの有効な方法ですが、それらをデカップリング状態に保つためには、基盤となるメッセージング構造(RabbitMQではキュー、スイッチ、バインディング)を維持する効果的な戦略を維持する必要があります。

出版社や消費者サービスは自ら必要なものを作成する責任があるかもしれませんが、初期のメッセージ損失、結合、構成や展開の運用保守の面でコストがかかることがあります。

おそらく、メッセージングシステムの設定を適切に扱う最良の方法は、アプリケーション外でスクリプトを書くことです。 これによりサービスは分離されたままであり、キューシステムは多くの既存サービスに影響を与えずに必要に応じて動的に変更できます。

翻訳元:ハイパーリンクのログインが見えます。
オリジナル英語:ハイパーリンクのログインが見えます。





先の:.NET 7に追加されたIParsableインターフェースの紹介
次に:VSTO(IV)画像をWord文書に埋める
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com