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

眺める: 3797|答える: 0

AMQPプロトコルの詳細な説明

[リンクをコピー]
掲載地 2022/08/14 23:22:55 | | | |
AMQPプロトコルの紹介

AMQP(Advanced Message Queuing Protocol)は、統一されたメッセージングサービスを提供するアプリケーション層標準プロトコルであり、メッセージ指向ミドルウェア向けに設計されたアプリケーション層プロトコルのオープンスタンダードです。 AMQPは、プロセス間で非同期メッセージを渡すためのネットワークプロトコルです。

このプロトコルに基づくクライアントやメッセージミドルウェアは、異なるクライアントやミドルウェア製品、異なる開発言語に制限されることなくメッセージを配信できます。

AMQPの主な特徴は、メッセージ指向、キューイング、ルーティング(ピアツーピアやパブリッシュ/サブスクライブを含む)、信頼性、そしてセキュリティです。 AMQPはメッセージ提供者とクライアントの動作を強制し、異なるベンダー間の真の相互運用性を可能にします。

AMQPとJMS

JMSは初期のメッセージミドルウェアを標準化しようとした試みであり、APIレベルでのみ標準化され、相互運用性を生み出すには程遠いものでした。

JMSとは異なり、AMQPはネットワーク上で送信されるデータの形式を記述するワイヤーレベルのプロトコルであり、バイト単位で流れます。 その結果、このデータ形式に準拠しメッセージを作成・解釈するツールは、他の互換性のあるツールと相互運用可能です。

AMQPのコア構成



生産者

制作ニュース。

コネクションファクトリー

コネクションを製造する工場だ。

接続

接続、アプリケーションネットワーク接続、ブローカーTCP/IP/トリプルハンドシェイクおよびクアッドウェーブ。

AMQP接続は通常、長い接続です。 AMQPはTCPを利用して信頼性の高い配信を提供するアプリケーション層プロトコルです。 AMQPは認証機構を使用し、TLS(SSL)保護を提供します。 アプリケーションがAMQPプロキシに接続する必要がなくなった場合は、単にTCP接続をシャットダウンするのではなく、AMQP接続を丁寧に解放する必要があります。

チャンネル

ネットワークチャネルは、その上に構築された軽量な接続です。 ほぼすべての操作はチャネルで行われ、これはメッセージの読み書きを行うチャネルであり、クライアントは各チャネルごとにペアを設定でき、それぞれがセッションタスクを表します。

接続を光ファイバーケーブルと比較すると、チャネルチャネルは光ファイバーケーブルのファイバーの一つと比較されます。 接続上には任意の数のチャネルを作成できます。

当社のビジネス業務の大部分はチャネルインターフェース上で行われており、以下が含まれます:


  • queueDeclare
  • 交換スイッチの宣言
  • queueBind queueBind
  • メッセージを公開する basicPublish
  • 消費者ニュース、basic、Consumeなど。



ブローカー

クライアントの接続を受け入れて、rabbitmqなどのAMQPエンティティサービスを実装します。

VirtualHost(ウェブホスティング)

論理的分離のために用いられる仮想ホスティングでは、仮想ホストが複数の交換機やキューを持つことができ、同じ仮想ホストが同じ名前の交換機を持つことはできません。

複数の孤立した環境(ユーザー、ユーザーグループ、スイッチ、キューなど)を単一のプロキシに実装するために、AMQPは仮想ホスト(仮想ホスト - vhosts)の概念を提供します。 これは、AMQPエンティティに完全に隔離された環境を提供するWebサーバーのウェブホスティングコンセプトに非常に似ています。 接続が確立されると、AMQPクライアントは使用する仮想ホストを指定します。

交換

スイッチはメッセージを受け取り、メッセージをルーティングキー(メッセージ保存機能なし)に基づいてバウンドキューにメッセージを送信します。

スイッチは、メッセージを送信するためのAMQPエンティティです。 スイッチがメッセージを受け取ると、それを1キューまたは0キューにルーティングします。 使用するルーティングアルゴリズムはスイッチの種類とバインディングルールによって決まります。

スイッチの種類:


  • 直接交換
  • ファンアウト交換
  • トピック交換
  • ヘッダー交換



スイッチの特性:

  • 名前:スイッチの名前
  • 耐久性:このスイッチが永続化されているかどうかを示す永続性フラグ
  • 自動削除:削除フラグ、表示この交換ですべてのキューが完了した場合、削除されるかどうか
  • 論証:エージェント自身に依存


スイッチの状況:

  • 丈夫な
  • 儚い


永続スイッチはブローカー再起動後に存在しますが、ステージングスイッチは存在しません(ブローカーがオンラインに戻った後に再宣言が必要です)。


デフォルトのスイッチ

デフォルトの交換は、実際にはメッセージブローカーによって事前宣言された直接交換であり、名前は空文字列です。

デフォルトのスイッチは特別なダイレクトアタッチドスイッチと考えることができます。
デフォルトスイッチ名:Null文字列(AMQPデフォルト)
デフォルトのスイッチタイプ:ダイレクトアタッチスイッチ

キューを作成する際、バインドされるスイッチが指定されていなければ、自動的にデフォルトのスイッチにバインドされ、バインディングのルーティングキー名はキュー名と同じになります。

スイッチへの直接接続

ダイレクトアタッチドスイッチは、メッセージが運ぶルーティングキーに基づいて対応するバインディングキーのキューにメッセージを届けます。 ダイレクトスイッチがメッセージを処理するために使用するユニキャストルーティング。

キューを作成する際、ダイレクトスイッチにバインドされている場合、ルーティングキーの名前を指定する必要はありません。なぜなら、デフォルトのルーティングキー名がキュー名と同じだからです。

直接接続スイッチのキューは通常、複数のコンシューマーにタスクをループで分配します(これをポーリングと呼びます)。

ワークフロー:


  • キューをスイッチにバインドする際は、Rを前提にバインディングキーを与えます。
  • ルーティングキー付きのメッセージがダイレクトアタッチドスイッチに送信されると、スイッチはそれをルーティングキー付きのキューにルーティングします。





ファンスイッチ

ファンスイッチは、割り当てられたルーティングキーに関係なく、それに割り当てられたすべてのキューにメッセージをルーティングします。

N個のキューがセクタースイッチにバインドされている場合、メッセージが送信されると、スイッチはメッセージのコピーをすべてのN個のキューに個別に送信します。 ファンスイッチは一般的にメッセージのブロードキャストルーティングを処理するために使用されます。




応用シナリオ:

放送メッセージ;
グループチャット機能。

テーマ切り替え

トピックスイッチはルーティングキーや交換の種類に応じて1つ以上のキューにメッセージを送信し、私たちはしばしばこれを利用して様々な公開/サブスクライブ、つまり公開サブスクリプションの実装に使います。

ダイレクトアタッチドスイッチのルーティングルールは厳密にマッチしており、メッセージをキューに送信する前にルーティングキーはバインディングキーと一致しなければなりません。
トピックスイッチのルーティングルールは、ワイルドカードを通じて一部のルールを満たすことで得られるファジーマッチです。

その条項は以下の通りです。

  • バインディングキーにはファジィマッチング用の特殊文字*と#を2つ入れることができます。 ここで*は単語 #用于匹配多个单词(ゼロでもよい)に対応するために使われます。
  • ルーティングキーは点で区切られた文字列(ドットマークで区切られた各文字列を単語と呼びます)





  • プロデューサーがRouting Key=A.A.A.というメッセージを送信すると、A.*.*のみが満たされ、QUEUE1にのみルーティングされます。
  • プロデューサーがRouting Key=A.B.Aというメッセージを送信すると、A.*.*と*.B.*を満たすことはQUEUE1とQUEUE2にルーティングされます。
  • プロデューサーがRouting Key=A.B.C.のメッセージを送信すると、A.*.*、*.B.*、*.*が満たされます。 Cはqueue1、queue2、queue3にルーティングされます。


応用シナリオ:

  • カテゴリやタグを含むニュース更新;
  • 複数の作業員が特定の作業を担当するバックグラウンドタスク。



ヘッドスイッチ

ヘッダースイッチは、ルーティングキーのマッチングルールに依存してメッセージを割り当てるキーに依存せず、送信メッセージの内容内のヘッダー属性に基づいてマッチングします。

ヘッドスイッチは、直接接続スイッチのもう一つの形態と考えられます。 ただし、ダイレクトスイッチのルーティングキーは文字列でなければならず、ヘッダー属性の値はこれに縛られず、整数やハッシュ値(辞書など)でも構いません。 柔軟性が増す(ただし実際にはヘッドスイッチはほとんど使いません)。

ワークフロー:


  • キューがヘッダースイッチにバインドされている場合、マッチングのために複数のヘッダーが同時にバインドされます。
  • 受信メッセージにはヘッダーと「x-match」パラメータが伴います。 「x-match」を「any」に設定すると、ヘッダーの任意の値をマッチングでき、「x-match」が「all」に設定されている場合は、ヘッダーのすべての値をマッチングしなければなりません。



スイッチ概要



バインディング

エクスチェンジとキュー間の仮想接続。

BindingKeyは、ExchangeおよびQueueのバインディングに関するルール記述です。 バインディングキーは、現在の交換機で現在バインドされているキューに割り当てられるルーティングキーの種類を指定します。

ルーティングキー

ルーティングルールは、仮想マシンが特定のメッセージをどのようにルーティングするかを決定するために利用されます。

バインディングキーとルーティングキーの違い


  • バインディングキーはキューとスイッチの間のバインディングキーです。
  • ルーティングキーは、プロデューサーからスイッチに送信される情報の一つです。
  • バインディングキーとルーティングキーが対応する場合、対応するキューにメッセージを入れます。



バインディングキーはExchangeおよびキューバインディングのルール記述であり、Exchangeがメッセージを受け取った際、Exchangeが受信したメッセージにはルーティングキーフィールドがあり、Exchangeはこのルーティングキーを現在のExchangeのすべてのバインディングキーとマッチングします。要件が満たされれば、Bindingに送信されます キーはメッセージを送信するキューにバインドされています。

さまざまなスイッチにおけるバインディングキーとルーティングキーの違い


デフォルトのスイッチ:バインディングキーはキュー名であり、カスタマイズはできません。 ルーティングキーはキュー名でもあり、それがキューに正常にルーティングされる前に使われます
直接接続スイッチ:バインディングキーはキュー名で、カスタマイズ可能です。 ルーティングキーは、バインディングキーが同じである場合にのみキューに正常にルーティングできます
ファンスイッチ:バインドキーなし; もちろん、ルーティングキーはありません。 スイッチに割り当てられたすべてのキューに自動的にルーティングされます
テーマ切り替え:カスタムバインディングキー; ルーティングキーをカスタマイズしましょう。 ルーティングキー==バインディングキーであり、ファジィマッチはキューに正しくルーティングされなければなりません
ヘッドスイッチ:バインドキーなし; もちろん、ルーティングキーはありません。 送信されたメッセージの内容にあるヘッダー属性に基づくマッチング




アプリで消費されるメッセージを保存します。

キュープロパティ:

  • 名前:キューの名前
  • 持続性:メッセージブローカーが再起動された後もキューは存在します
  • Exclusive:1つの接続のみで使用され、接続が終了するとキューが削除されます
  • 自動削除:最後の消費者が購読を解除した際に削除されます
  • 引数:一部のメッセージブローカーはTTLに似た追加機能を行うために使っています


キュー作成:
キューは宣言された後にのみ使用可能です。 もしキューがまだ存在しなければ、キューを宣言することでキューが作成されます。 宣言されたキューがすでに存在し、属性が同一であれば、宣言は元のキューに影響を与えません。 宣言の属性が既存のキューと異なる場合、エラーコード406のチャネルレベルの例外が投げられます。

キューの永続性:
永続性キューはディスク上に保存され、ブローカーが再起動された際にもそこに残ります。 永続化されていないキューは一時的キューと呼ばれます。 すべてのシナリオやケースがキューの永続化を必要とするわけではありません。

永続キューは、それにルーティングされたメッセージを永続的にしません。 メッセージエージェントが通信を終了して再起動された場合、再起動中に永続キューが再宣言され、いずれにせよ永続メッセージのみが再復元可能です。

消費者

消費者消費ニュース。 AMQPでは、消費者が保留中のメッセージを受け取る方法は2つあります。

メッセージミドルウェアは消費者にメッセージを配信します(プッシュAPI)
消費者は積極的にメッセージを受け取っています(プルAPI)
注意:複数の消費者が同じキューを聞く場合、キュー内のメッセージはどちらか一方の消費者によってのみ消費されます(各消費者が一度ずつ消費されるわけではありません)

メッセージ

メッセージ、サービス、アプリケーション間で送信されるデータはプロパティとボディで構成されています。

属性はメッセージの優先度、遅延、その他の高度な機能などを修正し、メインボディはメッセージ本文の内容です。

メッセージの特性:

  • コンテンツタイプ
  • コンテンツエンコーディング
  • ルーティングキー
  • 配信モード(永続的かどうか)
  • 配信モード(永続的または非永続的)
  • メッセージの優先度
  • メッセージ公開タイムスタンプ
  • 有効 期限
  • パブリッシャーアプリケーションID


メッセージ本文:
属性に加え、AMQPメッセージにはペイロード(メッセージが実際に運ぶデータ)も含まれており、AMQPプロキシはこれを不透明なバイト配列として扱います。

メッセージブローカーはペイロードを検査または修正しません。 メッセージはペイロードを持たずに属性のみを含みます。 通常、JSONのようなシリアライズ形式でデータを使い、コスト削減のためプロトコルバッファやMessagePackが構造化データをシリアライズし、メッセージのペイロードとして公開します。 AMQPおよびそのピアは、通常「content-type」と「content-encoding」フィールドを使ってメッセージを通信し、ペイロードを識別しますが、これはあくまで慣習に基づいています。

メッセージの持続性:
メッセージは永続的に公開され、AMQPエージェントはこのメッセージをディスクに保存します。 サーバーが再起動されると、システムは受信した永続メッセージが失われていないことを確認します。

単にメッセージを永続スイッチに送信したり、永続キューにルーティングしたりしても、メッセージが永続的になるわけではありません。メッセージの永続性は完全にメッセージ自体の永続モードに依存します。

メッセージを永続的に公開するとパフォーマンスに影響が出る可能性があります。

AMQPの作業プロセス

出版社は交換を通じてメッセージを公開します。

スイッチはルーティングルールに従ってスイッチに割り当てられたキューに受信メッセージを配布します。

最後に、AMQPエージェントはこのキューに登録した消費者にメッセージを届けるか、必要に応じて消費者自身がメッセージを受け取ります。

AMQPメッセージング機構

メッセージ確認

消費者は時折メッセージの処理に失敗したり、直接クラッシュしたりします。 ネットワークの理由も様々な問題を引き起こすことがあります。
ここで、AMQPエージェントがメッセージを削除する適切なタイミングがいつかという疑問が生じます。

AMQPの2つのメッセージ確認モード:

自動確認モード:メッセージミドルウェアから消費者に送信されたメッセージをすぐに削除します。 (AMQPメソッドを使った:basic.deliverまたはbasic.get-ok)
明示的確認モード:消費者が確認応答を送るのを待ってからメッセージを削除します。 (AMQPメソッドを用いてbasic.ack)
消費者が確認領収書を送らずに電話を切った場合、AMQPの担当者はメッセージを別の消費者に再配達します。 その時点で利用可能な消費者がいない場合、メッセージブローカーは次の消費者がこのキューに登録するのを待ち、再度配信を試みます。

メッセージの拒否

消費者がメッセージを受け取ると、処理プロセスは成功するか失敗するかのどちらかです。 消費者はメッセージブローカー(メッセージミドルウェア)に対し、「メッセージが処理されなかった(または完了しなかった)」として「拒否されたメッセージ」のために通知できます。
メッセージが拒否された場合、コンシューマーはメッセージブローカーにメッセージの処理方法を指示できます。破棄するかキューに戻すかです。

このキューに1人の消費者しかいない場合は、メッセージを拒否してキューに戻すようにし、同じ消費者でメッセージが無限ループしないようにしてください。

AMQPでは、メッセージの拒否操作を行うためにbasic.rejectメソッドが使われます。 しかし、basic.rejectには制限があります。複数のメッセージを謝書付きで拒否することはできません。 しかしRabbitMQを使っているなら、AMQP 0-9-1拡張であるネガティブアサレッジメント(nacksとも呼ばれる)を使ってこの問題を解決できます。


翻訳元:ハイパーリンクのログインが見えます。





先の:JS配列は、すべてのものといくつかの違いと用途です。
次に:RabbitMQ AMQPメッセージアーキテクチャの詳細な説明
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com