プロトコル補足

AMQP(Advanced Message Queuing Protocol) えーえむきゅーぴー

メッセージキューメッセージブローカーRabbitMQ非同期通信キューイングマイクロサービス
AMQPについて教えて

簡単に言うとこんな感じ!

AMQPは「メッセージを安全・確実に届けるための共通ルール」だよ!宅配便の伝票フォーマットみたいなもので、どのシステム同士でもこのルールを使えばメッセージをちゃんとやり取りできるようになるんだ。


AMQPとは

AMQP(Advanced Message Queuing Protocol) は、異なるシステムやアプリケーション間でメッセージを非同期にやり取りするためのオープンな通信規格です。「非同期」とは、送り手が受け手の返事を待たずに処理を続けられる仕組みのことで、大量のデータを効率よく処理したい場面で活躍します。

従来のメッセージキューの仕組みはベンダーごとに独自規格で、異なるメーカー製品間の連携が難しい課題がありました。AMQPはその問題を解消するために設計された業界共通の標準プロトコルです。HTTPがWebの共通ルールであるように、AMQPはメッセージング(アプリ間のデータ受け渡し)の共通ルールを定めています。

実務では、注文システムと在庫システムをつなぐ大量のログデータをまとめて処理するマイクロサービス(小さな機能の集合体)同士が連携するといったシーンで使われます。代表的な実装製品として RabbitMQAzure Service Bus などがあります。


AMQPの核心的な仕組み

AMQPの世界では、メッセージは次の3つの概念を経由して届けられます。「郵便システム」に例えると理解しやすいです。

AMQP用語郵便の例え役割
Producer(プロデューサー)手紙を書く人メッセージを送る側のアプリ
Exchange(エクスチェンジ)郵便局の仕分けセンタールールに従ってメッセージを振り分ける
Queue(キュー)郵便受けメッセージを一時的にためておく場所
Consumer(コンシューマー)手紙を受け取る人メッセージを受け取って処理するアプリ
Broker(ブローカー)郵便局全体Exchange+Queueを管理するサーバー
Binding(バインディング)配達ルールの設定ExchangeとQueueをつなぐ紐付け

Exchangeの種類(振り分けパターン)

Exchangeには4種類の振り分けルールがあります。これがAMQPの柔軟性の肝です。

タイプ振り分け方使いどころ
Direct宛名が完全一致したキューに届ける特定の処理担当に確実に届けたいとき
Fanout全部のキューに一斉送信同じ情報を複数システムに通知したいとき
Topicワイルドカード(*や#)でパターン一致種類ごとに柔軟に仕分けしたいとき
Headersメッセージのヘッダー属性で判断複雑な条件で振り分けたいとき

覚え方:「E・Q・C(エクキュコン)」

AMQPの流れは Exchange → Queue → Consumer の順。「エクキュコン」と覚えると、仕分け→貯める→受け取る、の順番が頭に入りやすいです。


歴史と背景

  • 2003年 — JPモルガン・チェースのJohn O’Haraが金融業界向けに構想を開始。金融取引の確実なメッセージ配信ニーズが原点
  • 2006年 — iMatix、Red Hat、Cisco、JPモルガン等が共同でAMQP 0-8仕様を公開
  • 2008年 — RabbitMQがAMQP 0-9-1を実装した製品として登場し、普及を牽引
  • 2011年 — OASISという標準化団体がAMQPを正式に標準化プロジェクトとして採択
  • 2012年AMQP 1.0がOASIS標準として正式策定。0-9-1と設計思想が大きく異なる別物と言ってよいほど刷新された
  • 2014年 — AMQP 1.0がISO/IEC 19464として国際標準に認定
  • 現在 — Azure Service Bus、ActiveMQ Artemisなどがバージョン1.0に対応。クラウド時代のマイクロサービス基盤として定着

関連技術・プロトコルとの比較

AMQPに似た役割を持つ技術はいくつかあります。使い分けを押さえておくと、システム選定の判断に役立ちます。

比較項目AMQPMQTTKafka(独自プロトコル)
主な用途エンタープライズ連携・金融IoT・センサーデバイス大規模ログ・ストリーム処理
メッセージ保証強い(ACK確認あり)選べる(QoS 0/1/2)強い(オフセット管理)
双方向通信△(基本は一方向)
標準化OASIS・ISO標準OASIS標準Apache OSSだが独自仕様
代表製品RabbitMQ、Azure Service BusMosquitto、EMQXApache Kafka、Confluent
向いている規模中〜大規模小〜中規模超大規模

AMQPのメッセージフロー図

Producer (送信アプリ) Producer (送信アプリ2) Broker(仲介サーバー) Exchange (仕分けセンター) Queue A (郵便受けA) Queue B (郵便受けB) Consumer A (受信アプリA) Consumer B (受信アプリB) ①送信 ②振り分け ③配信

関連する規格・RFC

規格・RFC番号内容
ISO/IEC 19464:2014AMQP 1.0の国際標準(ISOによる正式認定)
OASIS AMQP 1.0OASISによるAMQP 1.0仕様書
RFC 5246TLS 1.2(AMQPの通信暗号化に利用)
RFC 4422SASL(AMQPの認証機構として採用)

関連用語

  • ./640-message-queue.md — メッセージキュー:処理待ちのメッセージをためておく仕組み
  • ./641-rabbitmq.md — RabbitMQ:AMQPを実装した代表的なメッセージブローカー製品
  • ./642-mqtt.md — MQTT:IoT向けの軽量メッセージングプロトコル
  • ./643-kafka.md — Apache Kafka:大規模ストリーム処理向けの分散メッセージングシステム
  • ./644-microservices.md — マイクロサービス:小さな機能単位に分割してシステムを構築するアーキテクチャ
  • ./645-async-communication.md — 非同期通信:送り手が返事を待たずに処理を続けられる通信方式
  • ./646-message-broker.md — メッセージブローカー:メッセージの仲介・振り分けを担うサーバーソフトウェア
  • ./647-azure-service-bus.md — Azure Service Bus:MicrosoftのクラウドベースAMQP対応メッセージングサービス