В век, когда человека окружает большое количество ограниченно «интеллектуальных» вещей, возникает вопрос передачи данных между ними, для того чтобы в зависимости от полученной информации они производили совместные действия. К примеру, светофор как прибор изменял алгоритм работы, в зависимости от плотности потока машин, данные по которому приходят к нему от специализированных датчиков. Кроме аппаратной составляющей, этот вопрос решают коммуникационные протоколы. Наиболее распространенные из них, которые предназначены для связи между устройствами, или программными компонентами — MQTT, AMQP, WAMP, STOMP.
AMQP или Advanced Message Queuing Protocol — относительно молодая технология, изначально разработанная John O’Hara для нужд банка «JP Morgan Chase & Co». Впоследствии информация о структуре сети и исходные тексты библиотек ПО были предоставлены организации OASIS. С ее помощью, с 2014 года, этот протокол получил призвание в виде международного официального стандарта ISO/IEC 19464.
Характеристики протокола

AMQP протокол относительно прост в реализации и построен на давно известных технологиях текстовой связи между участниками сети. Только коммуникация происходит не напрямую между устройствами, а с использованием третьего узла — брокера (или AMQP-сервера). Такая структура дает возможность избежать утраты передаваемых данных, если узел (AMQP-клиент) отключен. Отправленные сообщения все равно будут ждать получателя на узловой станции.
Собственно, процедура выглядит так: издатель отправляет данные на узел AMQP. Там сообщения проходят сортировку и помещаются в очередь. Получатель соединяется с брокером и загружает информацию только с запрашиваемых потоков, причем ключевой узел отдает все сообщения линии, а не конкретного создателя.
Тут необходимо маленькое уточнение. AMQP — протокол высокого уровня, он не затрагивает вопросы физической коммуникации устройств или программных компонентов. Транспорт доставки пакетов — порты TCPIP, то есть он работает поверх них.
Последовательность действий: XML-данные кодируются в бинарный пакет, который и передается по каналам уровнем ниже.
Определения, принятые для AMQP сети:
- consumer — получатель сообщения;
- producer — создатель публикации;
- routing key — уникальный ключ очереди, в которую требуется поместить сообщение;
- queue — очередь, хранящая само сообщение
- exchange — так называется точка обмена, которая производит распределение данных по очередям;
- message — собственно передаваемые данные.
Что касается точек обмена, то сортировки в них используются четырех видов:
- Topic — использует данные о ключе очереди.
- Fanout — копирует сообщения во все созданные очереди вне зависимости от указанной информации.
- Direct — циклически распределяет информацию по расширенным сведениям в ключах маршрутизации. Помогает разгрузить очереди.
- Headers — расширенный вариант предыдущего, для движения цифровых потоков по очередям использует сведения в дополнительных атрибутах xml-структуры пакета.
Отличия протокола AMQP от подобных сетей — использование в XML синтаксиса при формировании пакетов сообщений. Такой вид передаваемых данных разрешает отправлять и принимать в них не только текстовую информацию, но и бинарную (с кодированием по алгоритму base64). Кроме того, сама структура сети – асинхронна, нет необходимости быть онлайн все время тому, кто отправляет данные, или тому, кто их получает. Главное, чтобы узел-брокер был в сети и готов обмениваться информацией.
Оборудование

Так как AMQP — протокол высокого уровня, то для работы с ним необходимы достаточно мощные устройства, которые не только способны поддерживать более низкий, чем он, уровень коммуникации (TCPIP), но и уметь производить формирование пакетов и их преобразование. Для этого лучше использовать сами компьютеры, начиная от микро вариантов и заканчивая «взрослыми» машинами.
Есть еще одно ограничение протокола, которое не разрешает использование AMQP в системах реального времени. Даже если клиент и сервер находятся на постоянной связи с брокером, все равно присутствует задержка в приеме и получении информации (формирование и помещение их в очередь, выдача по запросу). Хоть ее значения и не настолько велики, как у подобных систем, – она все равно есть.
Преимущества
Преимущество AMQP – конечно же в открытости. Исходные коды библиотек доступны, стандарт хорошо описан в сопутствующей документации. Множество различных фирм-разработчиков как программного, так и аппаратного обеспечения участвуют в его развитии, выпуская совместимые продукты.
Кроме того, специалистам в штате организаций-потребителей, даже просто используя библиотеки, очень легко писать совместимый софт для этой сети. Дополнительно к этому AMQP поддерживает частичную совместимость на основе JMS (Java Message Service), что дает легко его интегрировать в уже действующие программные решения.
Применение
Применений подобной системе – множество, ведь в своей основе она похожа на интернет рассылки. Это и чат программы, и обмен данными между специфичными компонентами, используемыми в организации. Да и собственно перемещение информации, как в среде одной ОС, так и между разными можно проводить, используя AMQP.
Решения на основе Advanced Message Queuing Protocol применяются в больших и известных банковских структурах, таких как Bank of America, Barklays, Credit Suisse, JPMorgan Change & Co, Goldman Sachs, Deutsche Börse Group. Применяется протокол и крупными ИТ организациями, среди которых Microsoft, Cisco, RedHat, Vmware™. Все это означает только одно: протокол устоялся и надежность передачи данных проверена в достаточной степени, чтобы использовать его в больших инфраструктурах предприятия.