AMQP(Advanced Message Queuing Protocol) えーえむきゅーぴー
簡単に言うとこんな感じ!
AMQPは「メッセージを安全・確実に届けるための共通ルール」だよ!宅配便の伝票フォーマットみたいなもので、どのシステム同士でもこのルールを使えばメッセージをちゃんとやり取りできるようになるんだ。
AMQPとは
AMQP(Advanced Message Queuing Protocol) は、異なるシステムやアプリケーション間でメッセージを非同期にやり取りするためのオープンな通信規格です。「非同期」とは、送り手が受け手の返事を待たずに処理を続けられる仕組みのことで、大量のデータを効率よく処理したい場面で活躍します。
従来のメッセージキューの仕組みはベンダーごとに独自規格で、異なるメーカー製品間の連携が難しい課題がありました。AMQPはその問題を解消するために設計された業界共通の標準プロトコルです。HTTPがWebの共通ルールであるように、AMQPはメッセージング(アプリ間のデータ受け渡し)の共通ルールを定めています。
実務では、注文システムと在庫システムをつなぐ、大量のログデータをまとめて処理する、マイクロサービス(小さな機能の集合体)同士が連携するといったシーンで使われます。代表的な実装製品として RabbitMQ や Azure 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に似た役割を持つ技術はいくつかあります。使い分けを押さえておくと、システム選定の判断に役立ちます。
| 比較項目 | AMQP | MQTT | Kafka(独自プロトコル) |
|---|---|---|---|
| 主な用途 | エンタープライズ連携・金融 | IoT・センサーデバイス | 大規模ログ・ストリーム処理 |
| メッセージ保証 | 強い(ACK確認あり) | 選べる(QoS 0/1/2) | 強い(オフセット管理) |
| 双方向通信 | ○ | ○ | △(基本は一方向) |
| 標準化 | OASIS・ISO標準 | OASIS標準 | Apache OSSだが独自仕様 |
| 代表製品 | RabbitMQ、Azure Service Bus | Mosquitto、EMQX | Apache Kafka、Confluent |
| 向いている規模 | 中〜大規模 | 小〜中規模 | 超大規模 |
AMQPのメッセージフロー図
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| ISO/IEC 19464:2014 | AMQP 1.0の国際標準(ISOによる正式認定) |
| OASIS AMQP 1.0 | OASISによるAMQP 1.0仕様書 |
| RFC 5246 | TLS 1.2(AMQPの通信暗号化に利用) |
| RFC 4422 | SASL(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対応メッセージングサービス