Service Bus での Advanced Message Queuing Protocol (AMQP) 1.0 のサポート

Azure Service Bus クラウド サービスは、主要な通信手段として AMQP 1.0 を使用します。 Microsoft は、AMQP を開発および進化させるために、過去 10 年間にわたって、お客様および競合するメッセージング ブローカーのベンダーの両方を含む、業界全体のパートナーと協力して、OASIS AMQP 技術委員会において新しい拡張機能を開発してきました。 AMQP 1.0 は、ISO/IEC 標準です (ISO 19464:20149)。

AMQP を使用すると、ベンダーおよび実装に中立で、オープンな標準プロトコルを使用したクロス プラットフォームのハイブリッド アプリケーションを構築できます。 異なる言語とフレームワークを使用して作成され、異なるオペレーティング システムで実行可能であるコンポーネントを使用して、アプリケーションを構築できます。 これらのコンポーネントはすべて Service Bus に接続でき、構造化されたビジネス メッセージを効率よく完全な忠実度でシームレスに交換できます。

概要: AMQP 1.0 の紹介とその重要な理由

これまで、メッセージ指向のミドルウェア製品では、クライアント アプリケーションとブローカーの間の通信に独自プロトコルが使用されてきました。 つまり、特定のベンダーのメッセージング ブローカーを選択すると、そのベンダーのライブラリを使用してクライアント アプリケーションをそのブローカーに接続する必要があります。 その結果、アプリケーションを別の製品に移植するには、接続されたすべてのアプリケーションでコード変更が必要なため、そのベンダーにある程度依存することになります。 Java コミュニティでは、Java Message Service (JMS) や Spring Framework の抽象化などの言語固有の API 標準によってその悩みがいくらか軽減されていますが、機能の範囲が狭く、他の言語を使用する開発者は考慮されていません。

さらに、異なるベンダーのメッセージング ブローカーを接続するのは面倒であり、 通常は、システム間でメッセージを移動し、独自のメッセージ形式間で変換を行うためにアプリケーション レベルのブリッジが必要になります。 これは頻繁に見られる要件です。たとえば、以前の異種システムに新しい統合インターフェイスを提供したり、合併後に IT システムを統合したりする必要がある場合です。 AMQP を使用すると、接続ブローカーを直接相互接続できます。たとえば、Apache Qpid Dispatch Router のようなルーターや、RabbitMQ のようなブローカーネイティブの "shovels" などのルーターを使用できます。

ソフトウェア業界は動きの速いビジネスです。新しいプログラミング言語やアプリケーション フレームワークがときには困惑するほどのペースで導入されます。 同様に、IT システムの要件は時間の経過と共に進化しているため、開発者は最新のプラットフォームの機能を活用しようとします。 しかし、選択したメッセージング ベンダーがこれらのプラットフォームをサポートしていないことがあります。 メッセージング プロトコルが独自のものである場合、他のベンダーが新しいプラットフォームのライブラリを提供することはできません。 このため、メッセージング製品を継続して使用できるようにするには、ゲートウェイまたはブリッジの構築などの方法を使用する必要があります。

AMQP (Advanced Message Queuing Protocol) 1.0 はこのような問題に促されて開発されました。 ほとんどの金融サービス企業と同じようにメッセージ指向ミドルウェアのヘビー ユーザーである JP Morgan Chase で生み出されました。 目的はシンプルです。つまり、さまざまな言語、フレームワーク、オペレーティング システムを使用して構築されたコンポーネント (すべて広範なサプライヤーの最良のコンポーネントを使用) を使用してメッセージ ベースのアプリケーションを作成できるようにする、オープン標準メッセージング プロトコルを作ることです。

AMQP 1.0 の技術的な特徴

AMQP 1.0 は、堅牢なクロス プラットフォーム メッセージング アプリケーションを作成するために使用できる、効率的で信頼性の高い回線レベルのメッセージング プロトコルです。 このプロトコルには、安全で信頼性の高い効率的なメッセージ転送を二者間で行うメカニズムを定義するという、シンプルな目的があります。 メッセージ自体は、異種混在の送信者と受信者が構造化されたビジネス メッセージを完全な忠実度で交換でき、移植できるデータ表現を使用してエンコード化されます。 最も重要な特徴の概要を次に示します。

  • 効率性: AMQP 1.0 は、プロトコル命令とそれを介して転送されるビジネス メッセージにバイナリ エンコードを使用する、接続指向のプロトコルです。 高度なフロー制御スキームが組み込まれており、ネットワークと接続コンポーネントの利用率が最大限に高められます。 そのため、このプロトコルは効率性、柔軟性、相互運用性のバランスを取るように設計されました。
  • 信頼性: AMQP 1.0 プロトコルを使用すると、ファイア アンド フォーゲット配信から、厳密に 1 回限り承認される信頼性の高い配信まで、信頼性を幅広く保証しながらメッセージを交換できます。
  • 柔軟性: AMQP 1.0 は、さまざまなトポロジのサポートに使用できる柔軟なプロトコルです。 同じプロトコルをクライアント間通信、クライアント/ブローカー間通信、ブローカー間通信に使用できます。
  • ブローカー モデルに依存しない: AMQP 1.0 の仕様には、ブローカーによって使用されるメッセージング モデルの要件がありません。 これは、既存のメッセージング ブローカーに AMQP 1.0 のサポートを簡単に追加できることを意味します。

AMQP 1.0 は Standard (大文字の S で始まる場合)

AMQP 1.0 は国際標準であり、ISO および IEC によって、ISO/IEC 19464:2014 として承認されています。

AMQP 1.0 は、2008 年以降、20 社を超える企業 (テクノロジ サプライヤーとエンド ユーザー企業の両方) で構成される中核的なグループにより開発されています。 その間、ユーザー企業は実際のビジネス要件を提供し、テクノロジ ベンダーはそれらの要件に合わせてプロトコルを進化させてきました。 プロセス全般にわたり、ベンダーはワークショップに参加し、実装間の相互運用性を検証するために協力してきました。

2011 年 10 月、開発作業は構造化情報標準促進協会 (OASIS) 内の専門委員会に移され、2012 年 10 月に OASIS AMQP 1.0 Standard がリリースされました。 この標準の開発中、次の企業が専門委員会に参加しました。

  • テクノロジ ベンダー: Axway Software、Huawei Technologies、IIT Software、INETCO Systems、Kaazing、Microsoft、Mitre Corporation、Primeton Technologies、Progress Software、Red Hat、SITA、Software AG、Solace Systems、VMware、WSO2、Zenika。
  • ユーザー企業: Bank of America、Credit Suisse、Deutsche Boerse、Goldman Sachs、JPMorgan Chase。

OASIS AMQP 技術委員会の現在の議長は、Red Hat と Microsoft です。

オープン標準の利点としては、次のような点がよく挙げられます。

  • ベンダー ロックインの可能性が下がる
  • 相互運用性
  • ライブラリとツールを広範に利用できる
  • 陳腐化を予防できる
  • 知識が豊富なスタッフを利用できる
  • リスクが低く扱いやすい

AMQP 1.0 と Service Bus

Azure Service Bus で AMQP 1.0 がサポートされるため、効率的なバイナリ プロトコルを使用して、さまざまなプラットフォームから、Service Bus キューとパブリッシュまたはサブスクライブ ブローカー メッセージングの機能を利用できます。 さらに、さまざまな言語、フレームワーク、およびオペレーティング システムを使って作成されたコンポーネントで構成されたアプリケーションを作成できます。

次の図は、標準の Java Message Service (JMS) API を使用して記述された Linux で実行される Java クライアントと、Windows で実行される .NET クライアントが、AMQP 1.0 を使用して Service Bus 経由でメッセージを交換する、サンプルのデプロイメントを示しています。

Diagram showing one Service Bus exchanging messages with two Linux environments and two Windows environments.

図 1: Service Bus と AMQP 1.0 を使用したクロスプラットフォーム メッセージングを示すサンプルのデプロイメント シナリオ

Azure SDK 経由でサポートされているすべての Service Bus クライアント ライブラリが AMQP 1.0 を使用します。

WebSocket 経由の AMQP プロトコル オプションは、HTTP/REST API と同様に、ポート TCP 443 で実行されますが、それ以外については通常の AMQP と機能的に同じです。 このオプションでは、HTTPS ポートを共有するためのトレードオフとして、追加のハンドシェイクのラウンドトリップが発生し、若干のオーバーヘッドが生じるため、初期接続の待機時間が長くなります。 このモードが選択されている場合は、通信のためには TCP ポート 443 で十分です。 次のオプションを使用すると、AMQP WebSocket モードを選択できます。

言語 オプション
.NET (Azure.Messaging.ServiceBus) ServiceBusClientOptions をパラメーターとして受け取るコンストラクターを使用して ServiceBusClient を作成します。 ServiceBusClientOptions.TransportTypeServiceBusTransportType.AmqpWebSockets に設定します。
.NET (Microsoft.Azure.ServiceBus) クライアント オブジェクトを作成する場合は、TransportTypeServiceBusConnection、または ServiceBusConnectionStringBuilder をパラメーターとして受け取るコンストラクターを使用します。

transportType をパラメーターとして受け取る構造の場合は、パラメーターを TransportType.AmqpWebSockets に設定します。

ServiceBusConnection をパラメーターとして受け取るコンストラクターの場合は、ServiceBusConnection.TransportTypeTransportType.AmqpWebSockets に設定します。

ServiceBusConnectionStringBuilder を使用する場合は、transportType を指定するオプションを提供するコンストラクターを使用します。

Java (com.azure.messaging.servicebus) クライアントを作成する場合は、ServiceBusClientBuilder.transportTypeAmqpTransportType.AMQP.AMQP_WEB_SOCKETS に設定します。
Java (com.microsoft.azure.servicebus) クライアントを作成する場合は、com.microsoft.azure.servicebus.ClientSettingstransportTypecom.microsoft.azure.servicebus.primitives.TransportType.AMQP_WEB_SOCKETS に設定します。
JavaScript Service Bus クライアント オブジェクトを作成する場合は、ServiceBusClientOptionswebSocketOptions プロパティを使用します。
Python Service Bus クライアントを作成する場合は、ServiceBusClient.transport_typeTransportType.AmqpOverWebSocket に設定します。

2026 年 9 月 30 日に、Azure SDK ガイドラインに準拠していない Azure Service Bus SDK ライブラリ WindowsAzure.ServiceBus、Microsoft.Azure.ServiceBus、および com.microsoft.azure.servicebus は廃止されます。 SBMP プロトコルのサポートも終了するため、2026 年 9 月 30 日以降、このプロトコルを使用できなくなります。 この日付より前に、重要なセキュリティ更新プログラムと強化された機能を提供する最新の Azure SDK ライブラリに移行してください。

以前のライブラリは 2026 年 9 月 30 日以降も引き続き使用できますが、Microsoft から公式のサポートと更新プログラムは提供されなくなります。 詳細については、サポート廃止のお知らせに関するページを参照してください。

また、AMQP 1.0 準拠の任意のプロトコル スタックから Service Bus を使用することもできます。

言語 ライブラリ
Java Apache Qpid Proton-J
C/C++ Azure uAMQP CApache Qpid Proton-C
Python Azure uAMQP for PythonApache Qpid Proton Python
PHP Azure uAMQP for PHP
Ruby Apache Qpid Proton Ruby
Go Azure Go AMQPApache Qpid Proton Go
C#、F#、VB AMQP .NET LiteApache NMS AMQP
JavaScript、Node Rhea

まとめ

  • AMQP 1.0 は、プラットフォーム間共通のハイブリッド アプリケーションを構築するために使用できる、信頼性の高いオープンなメッセージング プロトコルです。 AMQP 1.0 は OASIS の標準です。

次のステップ

さらに詳しい情報については、 次のリンク先を参照してください。