概要
マイクロサービスであろうと分散システムアーキテクチャであろうと、メッセージキューイングミドルウェアは不可欠かつ重要なリンクです. 主流のメッセージキューイングミドルウェアには RabbitMQ や RocketMQ などが含まれます. この記事からは RabbitMQ に代表されるメッセージについて詳しく紹介します. 。
AMQP プロトコル
- AMQP プロトコルは、ユニファイド メッセージング サービスを提供するアプリケーション層の標準プロトコルであり、このプロトコルに基づくクライアントおよびメッセージ ミドルウェアは、クライアント/ミドルウェア製品や開発言語の違いによる制限を受けずにメッセージを送信できます。
- AMQP プロトコルは、クライアント アプリケーションとメッセージ ミドルウェア間の非同期で安全かつ効率的な対話を提供するバイナリ プロトコルです。
- AMQP は、中間層サービスとして、メッセージの生成と消費を分離します。コンシューマが例外を生成しても、コンシューマによるメッセージの消費には影響しません。コンシューマが異常な場合、プロデューサによって生成されたメッセージは、サービスのメモリやディスクは消費速度に影響を与えませんが、同時に、ルーティング ルールに基づいてメッセージを指定されたコンシューマに配信して消費することもできます。
AMQPプロトコルの重要な役割
1. 生産者と消費者
- プロデューサはメッセージを生成する主体であり、コンシューマはメッセージを消費する主体です。
- データ統合とシステムの分離、非同期処理とイベント駆動、トラフィック Xuefeng、トランザクション メッセージと分散トランザクションの結果整合性
- プロデューサはメッセージを生成してメッセージ ブローカにスローし、メッセージ ブローカは配信ルールに従ってメッセージをコンシューマに渡します。
2. スイッチ
- スイッチはメッセージ ブローカーのルーターのようなもので、メッセージを取得した後、特定のルール (ルーティング キー) に従ってメッセージを 1 つまたはゼロのキューにルーティングします。スイッチには複数のルーティング モードがあります。
- メッセージ プロデューサとルーティング ルールに基づいて、メッセージは指定されたメッセージ キューに配信されます。スイッチはプロデューサによって配信されたメッセージを受信し、ルーティング ルールとキュー バインド関係に基づいて、配信に対応するスイッチまたはキューを照合します。スイッチはメッセージを保存せず、リツイートするだけです。
スイッチタイプ:
- スイッチに直接接続: ルーティング キーの完全一致に従って、対応するキューに配信します。
- 扇形スイッチ: ルーティング キーに関係なく、メッセージはコピーされ、それにバインドされているすべてのキューにルーティングされ、ブロードキャスト効果が得られます。
- トピックスイッチ: パターンマッチングによるルーティングキーに従って、対応するキューに配信します。
- スイッチには独自の属性もあり、独自の名前、永続的かどうか、その他のオプションを定義できます。
3. キュー
- キューはメッセージの一時的な保管場所です。少なくとも 1 人のコンシューマがキューにサブスクライブすると、メッセージはこれらのサブスクライブしたコンシューマにすぐに送信されます。ただし、メッセージが無人のサブスクリプション キューに到達すると、メッセージはキュー内で待機します。その後、消費者が配布します。
- Exchange とメッセージ キューの間にはバインド関係があり、メッセージが Exchange に到着すると、ルーティング ポリシーに基づいて、バインドされたメッセージ キューにメッセージを配信できます。
- メッセージ キューはメモリまたはディスクにメッセージを保存し、これらのメッセージを特定の順序で 1 つ以上のコンシューマに転送します。各メッセージ キューは独立して分離されており、相互に影響しません。
- メッセージ キューにはさまざまな属性 (プライベート、共有、永続、一時、クライアント定義、サーバー定義など) があり、実際のニーズに基づいて対応するタイプを選択できます。
4. メッセージ
- メッセージは情報の伝達手段であり、AMQP プロトコルのエンティティです。メッセージは 2 つの部分で構成されます。
- ペイロード: 実際の情報、送信したいコンテンツ。コンテンツのこの部分はメッセージ ブローカーに対して透過的です。
- メタ情報: メッセージ エージェントによって解析される、ルーティング キー、コンテンツ タイプ、エンコーディング、永続性などのメッセージ属性が含まれます。メッセージ エージェントは、メッセージ属性に従ってメッセージを配信および保存します。この部分は関連しています。そして消費者はそれを気にしません。
5.チャンネル
- ネットワーク チャネルは、接続リンク上に構築された軽量リンクです。ほとんどすべての操作はチャネルで実行されます。チャネルは、メッセージの読み取りと書き込みのためのチャネルです。クライアントは各チャネルへのリンクを確立でき、各チャネルはセッションを表しますタスク。
- 接続上に任意の数のチャネルを作成できます
Docker で RabbitMQ をインストールする
1. Docker ウェアハウスで RabbitMQ イメージを表示する
# 查询镜像
docker search rabbitmq
# 下载镜像
docker pull rabbitmq
2. MQ インストール管理の開始
クラウド サービスに展開する場合、セキュリティ グループで次のポートを開く必要があります: 15672 (UI ページ通信ポート)、5672 (クライアント ポート)、25672 (サーバー間の内部通信ポート)、61613 (ストンプ メッセージ送信)、1883 ( MQTT メッセージ キュー テレメトリ送信)。
docker run -d --name rabbit -e \
RABBITMQ_DEFAULT_USER=stark -e RABBITMQ_DEFAULT_PASS=1990@stark
-p 15672:15672 \
-p 5672:5672 \
-p 25672:25672 \
-p 61613:61613 \
-p 1883:1883 rabbitmq:management
アクセスを使用する場合、アカウント番号とパスワードはパラメータと設定http://127.0.0.1:15672
の値です。RABBITMQ_DEFAULT_USER
RABBITMQ_DEFAULT_PASS