Открыть сервис

AMQP

AMQP (Advanced Message Queuing Protocol, протокол расширенной очереди сообщений) — это открытый стандарт прикладного уровня для обмена сообщениями между компонентами распределённых информационных систем. Протокол определяет формат сообщений, правила их маршрутизации, гарантии доставки и модель взаимодействия между издателями (producers), потребителями (consumers) и брокерами сообщений (message brokers). AMQP ориентирован на обеспечение надёжной, асинхронной и независимой от языка программирования коммуникации в гетерогенных средах.

История

Разработка AMQP началась в 2003 году в финансовом секторе. Инициаторами выступили компании JPMorgan Chase, iMatrix и другие участники консорциума, стремившиеся создать единый стандарт для замены проприетарных протоколов обмена сообщениями, использовавшихся в банковских и трейдинговых системах. Первая версия спецификации (AMQP 0-9-1) была опубликована в 2006 году. Она получила широкое распространение благодаря реализации в брокере RabbitMQ (изначально разработанном компанией LShift, затем — Pivotal Software, ныне — VMware).

В 2011 году была представлена версия AMQP 1.0, которая была принята в качестве международного стандарта ISO/IEC 19464:2014. В отличие от AMQP 0-9-1, версия 1.0 является протоколом более высокого уровня, определяющим не только поведение брокера, но и формат сообщений на уровне провода (wire-level protocol). Она не требует обязательного наличия брокера и поддерживает прямое взаимодействие «точка-точка» (peer-to-peer). Наибольшую известность среди реализаций AMQP 1.0 получил брокер Apache ActiveMQ Artemis и клиентская библиотека Qpid Proton.

Архитектура и модель обмена

AMQP основан на модели, в которой сообщения проходят через брокер (или несколько брокеров) от издателей к потребителям. Ключевыми элементами модели являются:

В версии AMQP 0-9-1 центральную роль играют три сущности брокера:

AMQP 1.0 использует более гибкую модель, основанную на концепции узлов (nodes) и ссылок (links). Узлы могут быть как очередями, так и топиками, а также поддерживать распределённые транзакции. Вместо exchange и binding используются термины «распределитель» (distributor) и «фильтр» (filter), но общая логика маршрутизации остаётся схожей.

Типы маршрутизации (AMQP 0-9-1)

AMQP 0-9-1 определяет несколько стандартных типов обменников, определяющих логику маршрутизации:

В AMQP 1.0 эти схемы реализуются через механизмы фильтрации на стороне брокера, но не являются частью спецификации протокола.

Гарантии доставки

AMQP поддерживает три уровня гарантий доставки сообщений, которые задаются при отправке:

Для реализации гарантий протокол использует механизмы подтверждения (ACK/NACK), подтверждения приёма на стороне потребителя (consumer acknowledgements) и транзакции (publisher confirms). В AMQP 1.0 также поддерживается распределённая транзакция (XA).

Формат сообщения

Сообщение в AMQP 1.0 состоит из следующих секций:

Применение

AMQP широко используется в следующих областях:

Реализации

Наиболее известные реализации брокеров AMQP:

Клиентские библиотеки для AMQP существуют для большинства популярных языков программирования: Java (Qpid JMS, RabbitMQ Java Client), Python (pika, qpid-proton), C# (RabbitMQ.Client, AMQPNetLite), JavaScript (amqplib), Go (streadway/amqp), Ruby (Bunny) и других.

Сравнение с другими протоколами

AMQP часто сравнивают с MQTT и Apache Kafka.

Критика

Основные критические замечания в адрес AMQP:

Источники

  1. Спецификация AMQP 1.0 (ISO/IEC 19464:2014).
  2. Документация RabbitMQ — AMQP 0-9-1 Model Explained.
  3. Документация Apache ActiveMQ Artemis — AMQP 1.0 Support.
  4. OASIS Advanced Message Queuing Protocol (AMQP) Version 1.0.
  5. Книга «RabbitMQ in Depth» (Gavin M. Roy, Manning Publications, 2017).
  6. Книга «Enterprise Integration Patterns» (Gregor Hohpe, Bobby Woolf, Addison-Wesley, 2003).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →