| 通信プロトコル | |
| 略語 | AMQP |
|---|---|
| 目的 | メッセージ指向ミドルウェア |
| 開発者 | AMQP ワーキング グループ ( OASIS ) |
| 導入 | 2003年 |
| Webサイト | 詳しくはこちら |
アドバンストメッセージキューイングプロトコル(AMQP )は、メッセージ指向ミドルウェア用のオープン標準アプリケーション層プロトコルです。AMQPの特徴 は、メッセージ指向、キューイング、ルーティング(ポイントツーポイントおよびパブリッシュアンドサブスクライブを含む)、信頼性、セキュリティです。[1]
AMQP は、 SMTP、HTTP、FTPなどが相互運用可能なシステムを構築したのと同じように、異なるベンダーの実装が相互運用可能である限り、メッセージングプロバイダーとクライアントの動作を義務付けています。これまでのミドルウェアの標準化はAPI レベルで行われており (例: JMS )、複数の実装間の相互運用性の提供ではなく、さまざまなミドルウェア実装に対するプログラマのインタラクションの標準化に重点が置かれていました。[2] API とメッセージング実装が提供しなければならない動作のセットを定義する JMS とは異なり、AMQP はワイヤレベルのプロトコルです。ワイヤレベルのプロトコルは、バイトのストリームとしてネットワーク経由で送信されるデータの形式を記述したものです。したがって、このデータ形式に準拠するメッセージを作成および解釈できるツールであれば、実装言語に関係なく、他の準拠ツールと相互運用できます。
概要
AMQP はバイナリアプリケーション層プロトコルで、さまざまなメッセージング アプリケーションと通信パターンを効率的にサポートするように設計されています。AMQP は、最大 1 回(各メッセージが 1 回配信されるか、まったく配信されない)、少なくとも 1 回(各メッセージが確実に配信されるが、複数回配信される可能性がある)、正確に 1 回 (メッセージは常に確実に到着し、1 回のみ) などのメッセージ配信保証を備えたフロー制御[3]メッセージ指向通信と、 SASLやTLSに基づく認証および/または暗号化を提供します。[4]また、基盤となる信頼性の高いトランスポート層プロトコル(伝送制御プロトコル(TCP)など) を前提としています。[5]
AMQP 仕様は、(i) 型システム、(ii) プロセス間でメッセージを転送するための対称非同期プロトコル、(iii) 標準的で拡張可能なメッセージ形式、(iv) 標準化されているが拡張可能な「メッセージング機能」のセットという複数のレイヤーで定義されています。
歴史
AMQPは2003年にロンドンのJPモルガン・チェースのジョン・オハラによって考案されました。[1] [7] AMQPは共同オープンな取り組みとして考案されました。最初の設計は2004年半ばから2006年半ばにかけてJPモルガン・チェースによって行われ、 Cブローカーとプロトコルドキュメントの開発をiMatix Corporationと契約しました。2005年にJPモルガン・チェースは他の企業にアプローチし、シスコシステムズ、IONAテクノロジーズ、iMatix、Red Hat、およびTransaction Workflow Innovation Standards Team (TWIST)を含むワーキンググループを結成しました。同じ年にJPモルガン・チェースはRed Hatと提携してApache Qpidを作成しました。最初 はJavaで、その後すぐにC++で開発されました。
ワーキンググループは、Bank of America、Barclays、Cisco Systems、Credit Suisse、Deutsche Börse、Goldman Sachs、HCL Technologies Ltd、Progress Software、IIT Software、INETCO Systems Limited、Informatica(29 Westを含む)、JPMorgan Chase、Microsoft Corporation、my-Channels、Novell、Red Hat、Software AG、Solace Systems、StormMQ、Tervela Inc.、TWIST Process Innovations ltd、VMware(Rabbit Technologiesを買収)、WSO2を含む23社にまで拡大しました。
2008年、 iMatixのCEO兼チーフソフトウェアデザイナーであるPieter Hintjens氏は、「AMQPの問題点とその解決方法」[8]という記事を書き、ワーキンググループに配布して、差し迫った障害を警告し、iMatixが見つけた問題を特定し、AMQP仕様を修正する方法を提案しました。その時点で、iMatixはすでにZeroMQの作業を開始していました。2010年、Hintjens氏はiMatixがAMQPワーキンググループを離れ、AMQP/1.0をサポートせず、大幅にシンプルで高速なZeroMQを採用すると発表した。[9]
2011年8月、AMQPワーキンググループはOASISメンバーセクションへの再編を発表しました。[10]
AMQP 1.0 は、2011 年 10 月 30 日にニューヨークで開催された会議で AMQP ワーキング グループによってリリースされました。このイベントでは、Microsoft、Red Hat、VMware、Apache、INETCO、IIT Software が相互運用性のデモでプロトコルを実行するソフトウェアを実演しました。翌日の 2011 年 11 月 1 日には、この寄贈された AMQP バージョン 1.0 を国際的なオープン スタンダード プロセスで前進させるためのOASIS技術委員会の設立が発表されました[11]。OASIS からの最初のドラフトは 2012 年 2 月にリリースされました[12]。ワーキング グループによって公開されたものと比較した変更は、明確さを向上させるための編集に限定されていました (機能の変更はありません)。2 番目のドラフトは 6 月 20 日に公開レビュー用にリリースされました (これも機能の変更はありません) [13] 。そして AMQP は 2012 年 10 月 31 日に OASIS 標準として承認されました[14]。
OASIS AMQPは、2014年4月にISOおよびIECの国際標準としてリリースされることが承認されました。 [15] AMQP 1.0は、国際標準化機構(ISO)と国際電気標準会議(IEC)の情報技術に関する合同技術委員会(JTC1)を通じて投票されました。承認されたOASIS AMQPの提案には、ISO/IEC 19464という名称が与えられています。
AMQPの以前のバージョンは、2006年6月に公開された0-8、2006年12月に公開された0-9、2008年2月に公開された0-10 [16]、および2008年11月に公開された0-9-1でした。これらの以前のリリースは、1.0仕様とは大きく異なります。[17] [18]
AMQP は金融サービス業界で生まれましたが、幅広いミドルウェアの問題に一般的に適用できます。
AMQP 1.0 の説明
型システム
AMQPは、一般的に使用される幅広いタイプの相互運用可能な表現を可能にする自己記述型のエンコード方式を定義します。また、型付きデータに追加の意味を注釈付けすることもできます。 [19]たとえば、特定の文字列値をURLとして理解できるように注釈付けすることができます。同様に、「名前」、「住所」などのキーと値のペアを含むマップ値は、「顧客」タイプの表現として注釈付けすることができます。
型システムは、処理エンティティが標準および拡張メタデータを表現し理解できるようにするメッセージ形式を定義するために使用されます。また、このようなエンティティ間でメッセージを交換するための通信プリミティブ (AMQPフレーム本体など) を定義するためにも使用されます。
パフォーマティブとリンクプロトコル
AMQP のデータの基本単位はフレームです。2つのピア間のメッセージ転送を開始、制御、終了するために使用される 9 つの AMQP フレーム本体が定義されています。これらは次のとおりです。
- (接続を)開く
- (セッションを)開始する
- (リンクを)添付する
- 移行
- 流れ
- 配置
- (リンクを)切り離す
- 終了(セッション)
- (接続を)閉じる
リンクプロトコルはAMQP の中心です。
新しいリンクを開始するには、アタッチ フレーム本体が送信されます。リンクを解除するには、デタッチフレーム本体が送信されます。リンクは、メッセージを受信または送信するために確立される場合があります。
メッセージは転送フレームを使用して確立されたリンクを介して送信されます。リンク上のメッセージは一方向にのみ流れます。
転送は、フローフレームを使用して管理されるクレジットベースのフロー制御スキームの対象となります。これにより、プロセスは、大量のメッセージによって圧倒されることから自分自身を保護したり、より簡単にサブスクライブリンクが必要に応じてメッセージをプルできるようにしたりすることができます。[20]
転送された各メッセージは最終的に決済される必要があります。決済により、送信者と受信者が転送の状態について合意することが保証され、信頼性が保証されます。転送(または転送セット)の状態と決済の変更は、配置フレームを使用してピア間で通信されます。この方法で、最大1回、少なくとも1回、正確に1回など、さまざまな信頼性保証を実施できます。[21]
複数のリンクを双方向で 1 つのセッションにグループ化できます。セッションとは、開始フレームで開始され、終了フレームで終了される、2 つのピア間の双方向の連続的な会話です。2 つのピア間の接続では、それぞれが論理的に独立した複数のセッションを多重化できます。接続は、送信ピアの機能が表現されるオープンフレームで開始され、クローズフレームで終了します。
メッセージ形式
AMQP では、送信アプリケーションによって作成されるメッセージの部分を ベア メッセージとして定義します。メッセージが 1 つ以上のプロセス間で転送されるため、これは不変であると見なされます。
アプリケーションによって送信されたメッセージが不変であることを保証することで、エンドツーエンドのメッセージ署名や暗号化が可能になり、整合性チェック (ハッシュやダイジェストなど) が確実に有効になります。メッセージは転送中に仲介者によって注釈を付けることができますが、そのような注釈は不変のベア メッセージとは区別されます。注釈はベア メッセージの前後に追加できます。
ヘッダーは、メッセージに対して要求または指定できる配信関連の注釈の標準セットであり、存続時間、耐久性、優先度などが含まれます。[22]
ベアメッセージ自体は、オプションの標準プロパティのリスト(メッセージID、ユーザーID、作成時間、返信先、件名、相関ID、グループIDなど)、オプションのアプリケーション固有のプロパティのリスト(拡張プロパティなど)、およびAMQPがアプリケーションデータと呼ぶ本文として構成されます。[23]
プロパティは、注釈と同様に AMQP 型システムで指定されます。アプリケーション データは、任意の形式、およびアプリケーションが選択した任意のエンコードにすることができます。1 つのオプションは、AMQP 型システムを使用して、構造化された自己記述型データを送信することです。
メッセージング機能
リンク プロトコルは 2 つのノード間でメッセージを転送しますが、それらのノードが何であるか、またはどのように実装されているかについてはほとんど考慮しません。
重要なカテゴリは、メッセージの送信者と受信者の間の ランデブーポイントとして使用されるノードです(キューやトピックなど)。AMQP仕様では、このようなノードを分散ノードと呼び、いくつかの一般的な動作を規定しています。[24]
これには以下が含まれます:
- メッセージの受信者がメッセージを受け入れるか拒否するかなど、転送の標準的な結果[25]
- 移動とコピーの配布モード を通じて、競合消費者と非競合消費者という2つの基本的な配布パターンのいずれかを示す、または要求するメカニズム[26]
- オンデマンドでノードを作成する機能[27] [28]例えば一時的な応答キューなど
- フィルターを通して受信者にとって興味のあるメッセージのセットを絞り込む能力[29]
AMQP は単純なピアツーピア システムで使用できますが、このメッセージング機能のフレームワークを定義すると、より大規模で機能豊富なメッセージング ネットワークでのメッセージング仲介者 (ブローカー、ブリッジなど) との相互運用性も実現できます。指定されたフレームワークは基本的な動作をカバーしていますが、さらにコード化および標準化できる拡張機能を進化させることができます。
実装
AMQP 1.0 ブローカー実装
- Apache Qpid、Apache Foundationのオープンソースプロジェクト
- Apache ActiveMQ、Apache Foundationのオープンソースプロジェクト
- Azureイベントハブ[30] [31]
- Azureサービスバス[30] [32]
- IBM MQ [33] [34]
- Solace PubSub+、ハードウェア、ソフトウェア、クラウドのマルチプロトコルブローカー[35]
- VMwareが後援するオープンソースプロジェクトであるRabbitMQは、リリース4.0でAMQP 1.0をサポートしています。
1.0 以前の AMQP ブローカー実装
- JORAM は、 OW2 コンソーシアムによるJavaオープンソース実装です。
- Apache Qpidは複数のAMQPバージョンのサポートを維持している[36]
仕様
AMQPプロトコルバージョン1.0は、現在の仕様バージョンです。インターネット規模での相互運用性に必要なコア機能に重点を置いています。コア機能が最初に厳密に標準化されたため、以前のバージョンよりも明示的なルーティングが少なくなっています。AMQP 1.0の相互運用性は、以前のバージョンよりも多くの実装者によって広範囲にテストされています。[37]
AMQP Web サイトには、バージョン 1.0 の OASIS 仕様が掲載されています。
AMQP の以前のバージョンは、1.0 のリリース前に公開され (上記の履歴を参照)、それとは大きく異なっていますが、次のものが含まれます。
- AMQP 0-9-1は「多くの一般的なプログラミング言語とプラットフォーム」用のクライアントが利用可能である[38]
- AMQP0-10 について
同等の仕様
これらのオープン プロトコル仕様は、AMQP と同じまたは類似の領域をカバーします。
- Codehaus で開発されたテキストベースのプロトコルである Streaming Text Oriented Messaging Protocol (STOMP) は、JMS のような「宛先」のセマンティクスを使用します。
- 拡張可能なメッセージングおよびプレゼンス プロトコル(XMPP)、拡張可能なメッセージングおよびプレゼンス プロトコル。
- 軽量なパブリッシュ/サブスクライブ プロトコルであるMQTT 。
- ActiveMQで使用されるOpenWire。
Java Message Service (JMS) は、AMQP とよく比較されます。ただし、JMS は、メッセージのプロデューサーとコンシューマーの実装方法を定義するAPI 仕様 ( Java EE仕様の一部) です。JMS は実装間の相互運用性を保証するものではなく、使用する JMS 準拠のメッセージング システムをクライアントとサーバーの両方に展開する必要がある場合があります。一方、AMQP はワイヤ レベルのプロトコル仕様です。理論上、AMQP は、異なる AMQP 準拠のソフトウェアをクライアント側とサーバー側に展開できるため、相互運用性を提供します。
参照
参考文献
- ^ ab O'Hara, J. (2007). 「コモディティエンタープライズミドルウェアに向けて」ACM Queue . 5 (4): 48–55. doi : 10.1145/1255421.1255424 .
- ^ Vinoski, S. (2006). 「Advanced Message Queuing Protocol」(PDF) . IEEE Internet Computing . 10 (6): 87–89. doi :10.1109/MIC.2006.116. S2CID 14211884.
- ^ 「OASIS AMQP バージョン 1.0、セクション 2.6.7-2.6.8」。OASIS AMQP 技術委員会。2012 年6 月 18 日閲覧。
- ^ 「OASIS AMQP バージョン 1.0、セクション 2.6.12-2.6.13」。OASIS AMQP 技術委員会。2012年6 月 18 日閲覧。
- ^ 「OASIS AMQP バージョン 1.0、セクション 5.1」。OASIS AMQP 技術委員会。2012年6 月 18 日閲覧。
- ^ 「OASIS AMQP バージョン 1.0、セクション 2.1」。OASIS AMQP 技術委員会。2012年6 月 18 日閲覧。
- ^ Hintjens, Pieter (2006 年 2 月 7 日). 「AMQ プロジェクトの背景、著者」. iMatix Corporation . 2018 年2 月 18 日閲覧。
- ^ Hintjens, Pieter. 「AMQP の問題点 (および修正方法)」。iMatix。2011 年 9 月 6 日時点のオリジナルよりアーカイブ。2024 年3 月 1 日閲覧。
- ^ Hintjens, Pieter (2010年3月30日). 「iMatixは2011年までにOpenAMQのサポートを終了します」。openamq-devメーリングリスト。2010年4月2日時点のオリジナルよりアーカイブ。 2024年3月1日閲覧。
- ^ 「AMQP ワーキング グループが OASIS メンバー セクションに移行」。2012 年 4 月 16 日時点のオリジナルよりアーカイブ。2012年1 月 28 日閲覧。
- ^ OASIS が AMQP 技術委員会を設立し、ミドルウェア、モバイル、クラウド環境におけるビジネス メッセージングの相互運用性の向上を目指す
- ^ 「OASIS AMQP バージョン 1.0 の 30 日間パブリックレビュー」。2012 年 2 月 21 日。2012 年6 月 18 日閲覧。
- ^ 「OASIS AMQP バージョン 1.0 の 15 日間の公開レビュー」。2012 年 6 月 20 日。2012年6 月 20 日閲覧。
- ^ 「AMQP 1.0 が OASIS 標準になる」 2012 年 10 月 31 日。 2012 年11 月 1 日に閲覧。
- ^ 「情報技術 - 高度メッセージキューイングプロトコル (AMQP) v1.0 仕様」。ISO / IEC 19464。ISO。2014年5 月 1 日閲覧。
- ^ 「AMQP PMC 会議議事録 2008 年 2 月 13 日」。AMQP PMC 議事録。AMQP ワーキング グループ。2012 年 11 月 30 日時点のオリジナルよりアーカイブ。2012年6 月 15 日閲覧。
- ^ 「RabbitMQ - AMQP 0-8 から 0-9-1」。www.rabbitmq.com。2018年1 月 12 日閲覧。
- ^ rabbitmq-amqp1.0: AMQP 1.0 support for RabbitMQ、RabbitMQ、2017年12月17日、 2018年1月12日閲覧
- ^ 「OASIS AMQP バージョン 1.0、セクション 1.1」。OASIS AMQP 技術委員会。2012年6 月 18 日閲覧。
- ^ 「OASIS AMQP バージョン 1.0、セクション 2.6.7-2.6.9」。OASIS AMQP 技術委員会。2012 年6 月 18 日閲覧。
- ^ 「OASIS AMQP バージョン 1.0、セクション 2.6.12-2.6.14」。AMQP ワーキンググループ。2012年6 月 18 日閲覧。
- ^ 「OASIS AMQP バージョン 1.0、セクション 3.2.1」。OASIS AMQP 技術委員会。2012年6 月 18 日閲覧。
- ^ 「OASIS AMQP バージョン 1.0、セクション 3.2」。OASIS AMQP 技術委員会。2012年6 月 18 日閲覧。
- ^ 「OASIS AMQP バージョン 1.0、セクション 3.3」。OASIS AMQP 技術委員会。2012年6 月 15 日閲覧。
- ^ 「OASIS AMQP バージョン 1.0、セクション 3.4」。OASIS AMQP 技術委員会。2012年6 月 18 日閲覧。
- ^ 「OASIS AMQP バージョン 1.0、セクション 3.5.2」。OASIS AMQP 技術委員会。2012年6 月 18 日閲覧。
- ^ 「OASIS AMQP バージョン 1.0、セクション 3.5.3」。OASIS AMQP 技術委員会。2012年6 月 18 日閲覧。
- ^ 「OASIS AMQP バージョン 1.0、セクション 3.5.4」。OASIS AMQP 技術委員会。2012年6 月 18 日閲覧。
- ^ 「OASIS AMQP バージョン 1.0、セクション 3.5.1」。OASIS AMQP 技術委員会。2012年6 月 18 日閲覧。
- ^ ab axisc. 「Azure Service Bus および Event Hubs の AMQP 1.0 プロトコル ガイド」。docs.microsoft.com。2019年5 月 21 日閲覧。
- ^ ShubhaVijayasarathy. 「Azure Event Hubs とは? - ビッグ データ取り込みサービス」. docs.microsoft.com . 2019 年5 月 21 日閲覧。
- ^ axisc. 「Azure Service Bus における AMQP 1.0 の概要」。docs.microsoft.com。2019年5月 21 日閲覧。
- ^ 「IBM MQ」www.ibm.com . 2024年3月15日閲覧。
- ^ 「IBM MQについて」www.ibm.com . 2024年3月15日閲覧。
- ^ 「Solace PubSub+」. solace.com .
- ^ Qpid 0.22 - Apache Qpid™
- ^ 「AMQP の 1.0 以前のバージョンのステータス」。AMQP サイト。2014 年5 月 28 日閲覧。
- ^ 「AMQP 0-9-1 モデルの説明」。VMWare, Inc. 2012 年11 月 1 日閲覧。
外部リンク
- 公式サイト
- OASIS AMQP 技術委員会
- AMQP と AMQP モデルの概要 (バージョン 0-9-1)
- AMQP の OMG 分析と DDS-RTPS との比較
- RabbitMQ に関するビデオとスライド付きの Google Tech Talk
- FOSDEM 2009 での AMQP および RestMS メッセージングのプレゼンテーション
- AMQP クライアントのリスト
