Advanced Message Queuing Protocol
Advanced Message Queuing Protocol (AMQP) — это открытый протокол прикладного уровня для передачи сообщений между компонентами распределённых информационных систем, обеспечивающий гарантированную доставку, маршрутизацию, безопасность и транзакционность сообщений. AMQP стандартизирует взаимодействие между брокерами сообщений и клиентами, независимо от языка программирования и операционной системы. Протокол определён как международный стандарт ISO/IEC 19464:2014 и OASIS Standard.
История
Разработка AMQP началась в 2003 году в финансовом секторе. Компании JPMorgan Chase, iMatix Corporation, Red Hat, Cisco Systems, Microsoft и другие объединились для создания протокола, который бы решал проблемы совместимости между различными системами обмена сообщениями (например, IBM MQ, TIBCO Rendezvous, Microsoft MSMQ). Первая версия спецификации (AMQP 0-8) была опубликована в июне 2006 года. Версия 0-9-1 (2008 год) стала наиболее распространённой, хотя и неполной с точки зрения модели протокола.
В 2011 году была выпущена версия AMQP 1.0, которая кардинально отличалась от предыдущих. Она была принята как стандарт OASIS в 2012 году, а затем как ISO/IEC 19464:2014. AMQP 1.0 является единственной версией, получившей статус международного стандарта. Разработкой и поддержкой протокола занимается технический комитет OASIS AMQP.
Архитектура и модель протокола
AMQP определяет два уровня:
Транспортный уровень
Отвечает за передачу данных по сети, управление соединениями, сессиями и каналами. Использует TCP/IP в качестве транспортного протокола. Обеспечивает:
- Соединение (Connection) — постоянное TCP-соединение между клиентом и брокером.
- Сессия (Session) — логический канал внутри соединения для упорядоченной передачи сообщений.
- Канал (Channel) — мультиплексирование нескольких независимых потоков сообщений в рамках одной сессии.
Функциональный уровень
Определяет модель обмена сообщениями, включая:
- Сообщение (Message) — единица данных, состоящая из заголовков, свойств и тела (произвольного формата).
- Узел (Node) — точка назначения или источник сообщений (очередь, топик, обменник).
- Ссылка (Link) — однонаправленное соединение между узлами (источником и получателем).
Типы обмена сообщениями
AMQP поддерживает три основные модели обмена:
1. Очередь (Queue)
Сообщения хранятся в очереди до тех пор, пока их не получит один потребитель. Поддерживается конкурентный доступ (несколько потребителей) — каждое сообщение доставляется только одному из них.
2. Топик (Topic)
Сообщения публикуются в топик, а подписчики получают сообщения по определённым темам (маршрутизация на основе ключей маршрутизации). Поддерживается фильтрация сообщений.
3. Обменник (Exchange) — специфическая концепция AMQP 0-9-1
Обменник принимает сообщения от издателей и направляет их в одну или несколько очередей на основе правил маршрутизации. Существуют типы обменников:
- Direct — сообщение направляется в очередь, если ключ маршрутизации совпадает с ключом привязки очереди.
- Fanout — сообщение копируется во все привязанные очереди.
- Topic — маршрутизация по шаблону ключа (например,
logs.*). - Headers — маршрутизация на основе заголовков сообщения.
В AMQP 1.0 модель обменников заменена более гибкой моделью ссылок и узлов.
Гарантии доставки
AMQP предоставляет три уровня гарантий доставки сообщений:
| Уровень | Описание |
|---|---|
| At-most-once | Сообщение доставляется не более одного раза. Возможна потеря при сбое. |
| At-least-once | Сообщение доставляется хотя бы один раз. Возможны дубликаты. |
| Exactly-once | Сообщение доставляется ровно один раз. Требует подтверждений и транзакций. |
Гарантии реализуются через механизмы подтверждений (acknowledgements), транзакций и распределённых транзакций (XA).
Транзакции и безопасность
Транзакции
AMQP поддерживает локальные транзакции (в рамках одного брокера) и распределённые транзакции (через XA-интерфейс). Транзакция может включать отправку, получение и подтверждение нескольких сообщений.
Безопасность
- TLS/SSL — шифрование трафика между клиентом и брокером.
- SASL — аутентификация (поддерживаются механизмы PLAIN, CRAM-MD5, GSSAPI, SCRAM и другие).
- Авторизация — контроль доступа к узлам на основе политик брокера.
- Шифрование сообщений — на уровне приложения (не встроено в протокол).
Версии протокола
AMQP 0-9-1
- Наиболее распространённая версия в коммерческих и открытых брокерах (RabbitMQ, Apache Qpid).
- Определяет модель обменников, очередей и привязок.
- Не является полным стандартом — спецификация описывает только поведение, но не формат данных.
- Поддерживает только клиент-серверную модель.
AMQP 1.0
- Единственная версия, принятая как международный стандарт (ISO/IEC 19464:2014).
- Отказывается от модели обменников в пользу более гибкой модели ссылок.
- Поддерживает peer-to-peer взаимодействие (без обязательного брокера).
- Определяет строгий двоичный формат сообщений.
- Поддерживается в Apache ActiveMQ, Apache Qpid, Microsoft Azure Service Bus, IBM MQ (начиная с версии 9.0).
Реализации
Брокеры сообщений
- RabbitMQ — наиболее популярный брокер, поддерживающий AMQP 0-9-1 (с плагином для AMQP 1.0).
- Apache ActiveMQ — поддерживает AMQP 1.0.
- Apache Qpid — реализация AMQP 1.0 на Java и C++.
- Microsoft Azure Service Bus — облачный брокер, поддерживающий AMQP 1.0.
- IBM MQ — коммерческий брокер, поддерживающий AMQP 1.0.
Клиентские библиотеки
AMQP поддерживается практически всеми популярными языками программирования: Java, Python, C++, C#, Ruby, PHP, JavaScript, Go, Rust и другими. Библиотеки реализуют как AMQP 0-9-1 (например, pika для Python), так и AMQP 1.0 (например, qpid-proton для C++).
Применение
AMQP широко используется в:
- Финансовых системах — биржевые торги, платежные системы, обработка транзакций.
- Интернете вещей (IoT) — передача данных от датчиков и устройств.
- Микросервисной архитектуре — асинхронное взаимодействие между сервисами.
- Облачных вычислениях — интеграция облачных сервисов (Azure, AWS, Google Cloud).
- Промышленной автоматизации — системы управления производством (MES, SCADA).
Преимущества и недостатки
Преимущества
- Открытый стандарт, не зависящий от вендора.
- Высокая производительность и низкая задержка.
- Гарантированная доставка и транзакционность.
- Поддержка множества языков и платформ.
- Возможность работы через брандмауэры (использует TCP-порт 5672, для TLS — 5671).
Недостатки
- Сложность реализации полной спецификации (особенно AMQP 1.0).
- Необходимость настройки брокера и политик доставки.
- Отсутствие встроенной поддержки потоковой передачи данных (в отличие от MQTT).
- Меньшая распространённость по сравнению с HTTP/REST для простых сценариев.
Сравнение с другими протоколами
| Протокол | Модель | Гарантии доставки | Типичное применение |
|---|---|---|---|
| AMQP | Очереди, топики, обменники | At-most-once, At-least-once, Exactly-once | Финансы, микросервисы, IoT |
| MQTT | Публикация/подписка | At-most-once, At-least-once | IoT, встроенные системы |
| STOMP | Текстовая модель | At-most-once, At-least-once | Веб-приложения, простые сценарии |
| JMS | Java-специфичный | At-most-once, At-least-once | Java-экосистема |
Интересные факты
- AMQP 0-9-1 не является стандартом — это де-факто спецификация, используемая RabbitMQ.
- Разработка AMQP 1.0 заняла более 5 лет из-за разногласий между участниками консорциума.
- Протокол поддерживает передачу сообщений размером до 2^64 байт (16 эксабайт).
- В 2020 году RabbitMQ объявил о планах полной поддержки AMQP 1.0 (реализовано в версии 3.12, выпущенной в 2023 году).
Источники
- OASIS Standard: Advanced Message Queuing Protocol (AMQP) Version 1.0, 2012.
- ISO/IEC 19464:2014 — Information technology — Advanced Message Queuing Protocol (AMQP).
- RabbitMQ Documentation — AMQP 0-9-1 Model Explained.
- Apache Qpid Documentation — AMQP 1.0 Overview.
- Microsoft Azure Service Bus — AMQP 1.0 Support.
- IBM MQ Knowledge Center — AMQP 1.0 Support.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →