【えーえむきゅーぴー】

AMQP とは?

最終更新:
💡 システム同士のメッセージ交換に、共通の通信ルールを

システム同士でメッセージを受け渡すための通信プロトコル。AMQP 1.0はOASIS標準で、RabbitMQなどが対応している。配信の信頼性は、実装や保存設定、確認応答・再送の扱いにも依存する。

📌 このページのポイント
AMQP 0-9-1の振り分け例 送信アプリ Exchange fanoutで振り分け 注文を2つのQueueへ 送信 Bindingで結び付け 在庫用Queue 配送用Queue 在庫アプリ 受信・処理 配送アプリ 受信・処理 信頼性には、保存・確認応答・再送の設計も必要 AMQP 1.0は内部構成をこの形に固定しない
0-9-1のfanout Exchangeが、結び付けた各Queueへメッセージのコピーを送る例。AMQPを使うだけで損失や重複がなくなるわけではない。
ひよこ ひよこ
AMQPって、メールみたいにメッセージを送るってこと?
ペンギン先生 ペンギン先生
人同士のメールというより、システム同士の伝言だよ。たとえば注文システムが「注文が入った」というメッセージを送り、在庫や配送の処理へつなぐ。AMQPは、その交換に使う通信ルールなんだ。
ひよこ ひよこ
直接やりとりすればいいのに、なんでわざわざキューを挟むのかな?
ペンギン先生 ペンギン先生
ブローカーのキューで受け取ったメッセージを待たせれば、受信側が処理できるタイミングに合わせやすいんだ。ただし、保存設定や障害への対処も必要だよ。直接通信でも再試行はできるし、キューなら無条件に安全というわけではないんだ。
ひよこ ひよこ
Exchangeとかキューとか、仕組みがちょっと複雑そうだね?
ペンギン先生 ペンギン先生
AMQP 0-9-1では、ExchangeがBindingというルールに従ってQueueへ振り分けるよ。Queueが受信側の処理待ちのメッセージを持つんだ。郵便局の仕分けと届け先のポスト、という比喩が近いね。
ひよこ ひよこ
AMQP 1.0も同じ仕組みなの?
ペンギン先生 ペンギン先生
別のプロトコルだよ。1.0はメッセージの転送や形式を標準化していて、内部の振り分け方を0-9-1と同じモデルに固定していないんだ。RabbitMQは両方に対応しているけど、AMQP対応という名前だけで接続できると判断せず、版と機能を確認するんだよ。
ひよこ ひよこ
絶対に届くし、二重に処理されることもないの?
ペンギン先生 ペンギン先生
そこまでは保証できないよ。RabbitMQでは、重要なメッセージに保存設定を使い、受領や処理の確認応答、障害時の再送を組み合わせる。再送で重複することもあるので、同じ注文を二度処理しない工夫も必要なんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「AMQP」って出てきたら「システム同士でメッセージを交換するための通信ルール」と思えばだいたいOK!
📖 おまけ:英語の意味
「Advanced Message Queuing Protocol」 = 高度なメッセージキューイングのプロトコル
💬 Advanced(高度な)、Message Queuing(メッセージのキューイング)、Protocol(通信の取り決め)の略だよ

参考資料

← 用語集にもどる