RabbitMQ学習-最初の理論的基礎

1.定義

メッセージキュー:メッセージの送信中にメッセージを保持するコンテナ。

これはより古典的なコンシューマープロデューサーモデルで、より抽象的で類似しています。AスレッドはBスレッドにメッセージを送信する必要があります(AスレッドとBスレッドは必ずしも同じマシン上にある必要はありません)。メッセージキューサーバーに送信された後、Bスレッドがメッセージサーバー上のメッセージキュー内のメッセージを読み取るかサブスクライブします。スレッドAとBの間には直接の通信はありません。MQサーバーは中間でリレーとして機能します。

2.該当するシナリオ

非同期伝送により適しています。

非同期:送信者はメッセージが正常に送信されたかどうかを気にせず、メッセージを送信するだけで、メッセージが正常に送信されたかどうかは取得しません。

同期:送信者はメッセージが正常に送信されたかどうかを懸念しています。メッセージの送信後、受信者がステータスコードを返すまで待機し、ステータスコードに従ってメッセージが正常に送信されたかどうかを判断して、対応するアクションを実行します。

例として、HTTPで同期および非同期を考えます

たとえば、一般的なB / Sアーキテクチャのクライアントとサーバー間の通信は同期的です。つまり、要求を送信します—>サーバーが処理してメッセージを返すのを待つ—>サーバーによって返されたメッセージを取得し、プロセスが完了します。

たとえば、Ajaxテクノロジーは非同期であり、リクエストはイベントによってトリガーされます->サーバーの処理(ブラウザーは待機する必要がなく、他のことを実行できます)->処理が完了します。

3. RabbitMQ

メッセージキューには、RabbitMQ、Redis、ZeroMQ、ActiveMQ、Jafka / Kafkaなど、同様の製品が多数あります。

RabbitMQはAMQP(Advanced Message Queuing Protocol)の標準的な実装であり、その簡単な紹介は、http://www.rabbitmq.com/getstarted.htmlで確認できます。

3.1役割の概念

すべてのオープンソースプロジェクトには独自の設計方法とモジュールの役割があり、RabbitMQも例外ではありません。構造図は次のとおりです。

ここに画像の説明を挿入

ブローカー:メッセージキューサーバーエンティティ

Exchange:メッセージ交換。メッセージがどのキューにルーティングされるかを指定します。

キュー:メッセージキューキャリア。各メッセージは1つ以上のキューに入れられます。

バインディング:バインディング。その役割は、ルーティングルールに従って交換とキューをバインドすることです。

ルーティングキー:ルーティングキー、エクスチェンジはこのキーに基づいてメッセージを配信します。

vhost:仮想ホスト。複数のvhostをブローカーに設定して、異なるユーザーの権限を分離できます。

プロデューサー:メッセージプロデューサーは、メッセージを配信するプログラムです。

コンシューマー:メッセージコンシューマーは、メッセージを受信するプログラムです。

channel:メッセージチャネルクライアントの各接続では、複数のチャネルを確立でき、各チャネルはセッションタスクを表します。

3.2作業プロセス

  • プロデューサークライアント
  1. クライアントはRabbitMQサーバーに接続し、メッセージチャネル(チャネル)を開きます。
  2. クライアントはメッセージ交換(交換)を宣言し、関連する属性を設定します。
  3. クライアントはメッセージキュー(キュー)を宣言し、関連するプロパティを設定します。
  4. クライアントはルーティングキーを使用して、メッセージ交換(交換)とメッセージキュー(キュー)の間のバインディング関係を確立します。
  5. クライアントメッセージはメッセージ交換(交換)に配信されます。
  6. クライアントはメッセージチャネル(チャネル)とサーバーとの接続を閉じます。
  • サーバー側

交換がメッセージを受信すると、メッセージキーと設定されたバインディングに基づいてメッセージルーティングを実行し、メッセージを1つ以上のメッセージキューに配信します。

交換にはいくつかのタイプもあります。

(1)。ダイレクトスイッチ:キーに基づいて配信します。たとえば、バインド中にバインドキーがabcに設定されている場合、クライアントが情報を送信すると、abcに設定されたキーのみがキューにポストされます。

(2)。トピックスイッチ:パターンマッチング後にキーを配信します。例:記号「#」は1つ以上の文字と一致し、記号「*
」は一連の連続するアルファベット文字と一致します。たとえば、「abc。#」は「abc.def.ghi」と一致でき、「abc。
*」は一致のみ可能です「Abc.def」。

(3)。ファンアウトスイッチ:ブロードキャストモードを採用しており、メッセージが着信すると、スイッチにバインドされているすべてのキューに配信されます。

  • 消費者クライアント:(
    まだ調査されていません)

3.3 RabbitMQメッセージの永続性

RabbitMQはデータの永続性をサポートします。つまり、ディスクにデータを書き込むとデータのセキュリティが向上します。メッセージキューの永続性には3つの部分があります。

  1. メッセージ交換(交換)の永続性。宣言するとき、durableを1に指定します
  2. メッセージキュー(キュー)の永続性。宣言するときに、durableを1に指定します
  3. メッセージの永続性、配信時にdelivery_modeを2に指定(1は非永続)

メッセージ交換(交換)とメッセージキュー(キュー)の両方が永続的である場合、それらの間のバインディング(Binding)も永続的です。メッセージ交換とメッセージキューの間に永続的および非永続的がある場合、バインドは許可されません。

元の記事を40件公開 賞賛を25件 100,000回以上の閲覧

おすすめ

転載: blog.csdn.net/yym373872996/article/details/105651557