. 1 3 4 5 6 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z А Б В Г Д Е З И К Л М Н О П Р С Т У Х Ц Ч

AMQP

AMQP (Advanced Message Queuing Protocol) – это протокол для передачи сообщений между приложениями, который обеспечивает надежную доставку сообщений, управление очередями и другие функции для обеспечения эффективного обмена данными между различными системами. AMQP часто используется в распределенных системах и сетях для управления сообщениями и обмена данными между различными компонентами системы.

AMQP основан на трёх понятиях:

  1. Сообщение (message) — единица передаваемых данных, основная его часть (содержание) никак не интерпретируется сервером, к сообщению могут быть присоединены структурированные заголовки.
  2. Точка обмена (exchange) — в неё отправляются сообщения. Точка обмена распределяет сообщения в одну или несколько очередей. При этом в точке обмена сообщения не хранятся. Точки обмена бывают трёх типов:
    • fanout — сообщение передаётся во все прицепленные к ней очереди;
    • direct — сообщение передаётся в очередь с именем, совпадающим с ключом маршрутизации (routing key) (ключ маршрутизации указывается при отправке сообщения);
    • topic — нечто среднее между fanout и direct, сообщение передаётся в очереди, для которых совпадает маска на ключ маршрутизации, например, app.notification.sms.# — в очередь будут доставлены все сообщения, отправленные с ключами, начинающимися с app.notification.sms.
  3. Очередь (queue) — здесь хранятся сообщения до тех пор, пока не будут забраны клиентом. Клиент всегда забирает сообщения из одной или нескольких очередей.

Протокол можно разделить на два слоя:

  1. Functional Layer – определяет набор команд которые выполняют работу от имени приложения.
  2. Transport Layer – обслуживает запросы приложения к серверу и сервера к приложению, управляет мультиплексированием каналов, фреймингом, кодировкой, heart-beating, представлением данныx, работой с ошибками.

Примеры очередей:

  • store-and-forward-queue – хранит и распространяет сообщения для многих потребителей (consumers) по принципу round robin. Постоянные, публичные
  • private reply queue – хранит и распространяет сообщения для одного потребителя (consumer). Временные, приватные
  • private subscription queue – хранит сообщения от многих источников и отправляет одному потребителю (consumer). Временные, приватные

Протокол не ограничивается этими тремя видами. Они указаны как пример реализации.

Терминология

  • Exchange – сущность которая получает сообщения от приложений и при необходимости перенаправляет их в очереди сообщений.
  • Binding: отношение между очередью сообщений и точками обмена.
  • Routing key: виртуальный адрес который точка обмена использует для принятия решения о дальнейшей маршрутизации.

Exchange

Принимает сообщения от поставщика и направляет их в message queue в соответствии с предопределёнными критериями. Такие критерии называют bindings. Exchange – механизм согласования и маршрутизации сообщений. На основе сообщений и их параметров (bindings) принимают решение о перенаправлении в очередь или другой exchange. Не хранят сообщения.Термин exchange означает алгоритм и экземпляр алгоритма. Также говорят exchange type и exchange instance.AMQP определяет набор стандартных типов exchange. Приложения могут создавать свои exchange instance.

Каждый exchange реализует свой алгоритм маршрутизации. Существует несколько стандартных типов exchange, описанных в Functional Specification стандарта. Из них два являются важными:

  • Direct exchange – маршрутизирует на основе routing key. Базовый exchange – это direct exchange
  • topic exchange – маршрутизирует на основе шаблона маршрутизации.

Сервер создаст несколько exchange, включая direct и topic. Они будут иметь wellknown имена и клиентские приложения смогут работать с ними.

Routing Key

В общем случае exchange проверяет свойства сообщения, поля заголовка и содержимое его тела и, используя эти и, возможно, данные из других источников, решает, как направить сообщение. В большинстве простых случаев exchange рассматривает одно ключевое поле, которое мы называем Routing KeyRouting Key – это виртуальный адрес, который сервер exchange может использовать для принятия решения о направлении сообщения. Для маршрутизации типа point-to-point ключом маршрутизации обычно является имя очереди сообщений. Для маршрутизации pub-sub ключ маршрутизации обычно является значением иерархии топика (topic – смотри publication/subscruber). В более сложных случаях ключ маршрутизации может быть объединен с маршрутизацией по полям заголовка сообщения и/или его содержанием.
Примером реализации данного протокола является apache qpid.Он предоставляет два брокера сообщений AMQP:
  • Реализованный на C++ – высокая производительность, низкая латентность, а также поддержка RDMA
  • Реализованный на Java – Полная JMS совместимость, запускается на любой платформе Java

Оба брокера сообщений AMQP поддерживают клиентов на множестве языков программирования если и сам клиент обмена сообщениями и соответствующий брокер поддерживают одну и ту же версию AMQP. Имеются клиентские библиотеки, написанные на C++, Java (JMS), .Net (написан на C#), Python, Ruby и Zabbix.

Обсуждение закрыто.