Поддержка расширенного протокола очередей сообщений (AMQP) 1.0 в Служебной шине

Облачная служба Служебной шины Azure использует AMQP 1.0 в качестве основного средства обмена данными. Корпорация Майкрософт уже десять лет сотрудничает с партнерами по отрасли — клиентами и поставщикам конкурирующих брокеров обмена сообщениями — для разработки и развития AMQP. Новые расширения для этой службы разрабатываются в техническом комитете OASIS AMQP. AMQP 1.0 — это стандарт ISO и IEC (ISO 19464:20149).

AMQP позволяет создавать кроссплатформенные гибридные приложения, использующие протокол открытого стандарта, не привязанный к конкретному поставщику или реализации. Можно создавать приложения, использующие компоненты, разработанные на разных языках и различных платформах и выполняемые в других операционных системах. Все эти компоненты могут подключаться к шине Service Bus и легко, эффективно и достоверно обмениваться структурированными бизнес-сообщениями.

Введение. Что такое AMQP 1.0 и почему этот протокол так важен?

Обычно ориентированное на сообщения межплатформенное программное обеспечение использует собственные протоколы для обмена данными между клиентскими приложениями и брокерами. Это означает, что после выбора брокера сообщений конкретного поставщика для подключения клиентских приложениях к этому брокеру необходимо использовать библиотеки этого поставщика. Это создает определенную зависимость от этого поставщика, так как перенос приложения в другой продукт потребует изменения кода всех подключенных приложений. В сообществе Java для стандартных API, привязанных к этому языку, таких как служба сообщений Java (JMS) и абстракции Spring Framework, эта проблема была отчасти решена, однако у этих решений узкая область функционального применения, а разработчики не могут использовать другие языки.

Кроме того, подключение брокеров сообщений от различных поставщиков достаточно сложно реализовать. Обычно для этого требуется создание мостов на уровне приложений, чтобы перемещать сообщения из одной системы в другую, а также чтобы выполнять преобразование между собственными форматами сообщений этих брокеров. Это является общим требованием, например, при обеспечении нового унифицированного интерфейса для старых разрозненных систем или при интеграции ИТ-систем после слияния. AMQP позволяет подключать брокеры напрямую, например с помощью маршрутизаторов, таких как Apache Qpid Dispatch, или разработанных специально для определенных брокеров обходных решений, таких как RabbitMQ.

Индустрия программного обеспечения — это быстро меняющаяся отрасль, новые языки программирования и платформы приложений иногда появляются с ошеломляющей скоростью. Аналогично, со временем меняются требования ИТ-систем, и разработчики хотят пользоваться преимуществами новейших платформ. Но иногда выбранный поставщик системы обмена сообщениями не поддерживает эти платформы. Если протоколы передачи сообщений являются закрытыми, невозможно предоставить библиотеки для этих новых платформ. Таким образом, чтобы продолжить использование продукта обмена сообщениями, необходимо применять такие подходы, как создание шлюзов или мостов.

Именно эти проблемы послужили поводом для разработки протокола AMQP 1.0. Первоначально он был разработан в компании JP Morgan, которая, как и большинство финансовых компаний, чрезвычайно активно использует ориентированное на сообщения межплатформенное программное обеспечение. Цель была проста — создать протокол обмена сообщениями на основе открытых стандартов, который позволил бы создавать приложения на основе сообщений, используя компоненты, разработанные на разных языках программирования, на разных платформах и в различных операционных системах — лучшие компоненты от множества поставщиков.

Технические характеристики AMQP 1.0

AMQP 1.0 — это эффективный и надежный протокол обмена сообщениями на уровне соединения, который можно использовать для создания надежных кроссплатформенных приложений для обмена сообщениями. Цель этого протокола проста — определить механизм безопасной, надежной и эффективной передачи сообщений между двумя сторонами. Сами сообщения кодируются, используя переносимое представление данных, позволяющее разнородным отправителям и получателям с полной достоверностью обмениваться структурированными бизнес-сообщениями. Ниже приведен перечень наиболее важных показателей.

  • Эффективный. AMQP 1.0 является протоколом с установлением соединения, который использует двоичное кодирование для инструкций протокола и передаваемых с его помощью бизнес-сообщений. Для максимального использования сети и соединенных компонентов он поддерживает сложные схемы управления потоком. С другой стороны, этот протокол был разработан для обеспечения равновесия между эффективностью, гибкостью и возможностями взаимодействия.
  • Надежный. Протокол AMQP 1.0 позволяет обмениваться сообщениями с различными уровнями гарантии надежности, от "отправил и забыл" до надежной доставки с однократным подтверждением.
  • Гибкий. AMQP 1.0 является гибким протоколом, который можно использовать для поддержки различных топологий. Один и тот же протокол можно использовать для взаимодействия клиент-клиент, клиент-брокер и брокер-брокер.
  • Независимый от модели брокера. Спецификация 1.0 AMQP не предъявляет никаких требований к модели обмена сообщениями, используемой брокером. Это означает, что можно легко добавить поддержку AMQP 1.0 для существующих брокеров сообщений.

AMQP 1.0 — это Стандарт (с заглавной буквы С)

AMQP 1.0 — это международный стандарт, утвержденный организациями ISO и IEC в качестве стандарта ISO/IEC 19464:2014.

AMQP 1.0 разрабатывался с 2008 г. активной группой, включающей свыше 20 компаний, среди которых были как поставщики технологий, так и конечные пользователи. В течение этого времени пользовательские компании внесли свой вклад, определив требования, предъявляемые реальным бизнесом, а поставщики технологий довели протокол до соответствия этим требованиям. На протяжении всего процесса поставщики участвовали в семинарах, сотрудничая для проверки возможности взаимодействия между разработанными реализациями.

В октябре 2011 г. функции разработки перешли к техническому комитету Организации продвижения структурированных информационных стандартов (Organization for the Advancement of Structured Information Standards, OASIS). В результате в октябре 2012 г. был выпущен Стандарт AMQP 1.0 OASIS. В разработке стандарта техническим комитетом принимали участие следующие компании:

  • Поставщики технологий: Axway Software, Huawei Technologies, IIT Software, INETCO Systems, Kaazing, Microsoft, Mitre Corporation, Primeton Technologies, Progress Software, Red Hat, SITA, Software AG, Solace Systems, VMware, WSO2, Zenika.
  • Пользовательские компании: Bank of America, Credit Suisse, Deutsche Boerse, Goldman Sachs, JPMorgan Chase.

Текущие главы технического комитета OASIS AMQP представляют корпорации Red Hat и Майкрософт.

Ниже приведены некоторые из часто упоминаемых преимуществ открытых стандартов:

  • Уменьшение вероятности привязки к поставщику
  • Совместимость
  • Широкая доступность библиотек и инструментария
  • Защита от устаревания
  • Доступность опытного персонала
  • Снижение риска и возможность управления им

Протокол AMQP 1.0 и служебная шина

Поддержка протокола AMQP 1.0 в Azure Service Bus означает, что с эффективным двоичным протоколом предоставляемые сервисной шиной возможности очередей и обмена сообщениями с публикацией/подпиской у брокера теперь можно использовать на различных платформах. Кроме того, можно создавать приложения, содержащие компоненты, созданные с использованием разнообразных языков, платформ и операционных систем.

На приведенной ниже схеме показан пример развертывания, в котором Java-клиенты, работающие в среде Linux и написанные с использованием стандартного API JMS (Java Message Service), и клиенты .NET, работающие под управлением Windows, обмениваются сообщениями по шине Service Bus с помощью AMQP 1.0.

Diagram showing one Service Bus exchanging messages with two Linux environments and two Windows environments.

Рисунок 1. Пример сценария развертывания, показывающий межплатформенный обмен сообщениями с использованием служебной шины и протокола AMQP 1.0

Все поддерживаемые клиентские библиотеки Служебной шины, включенные в пакет Azure SDK, используют AMQP 1.0.

Вариант протокола AMQP через WebSockets работает через порт TCP 443, как и HTTP/REST API. В остальном с точки зрения функциональности он полностью идентичен обычному протоколу AMQP. Этот вариант протокола имеет более высокую начальную задержку при подключении из-за дополнительных циклов подтверждения соединения, а также требует несколько больших дополнительных расходов для совместного использования порта HTTPS. Если выбран этот режим, для обмена данными достаточно TCP-порта 443. Для выбора режима AMQP через WebSockets используются следующие параметры.

Язык Вариант
.NET (Azure.Messaging.ServiceBus) Создайте объект ServiceBusClient с помощью конструктора, принимающего ServiceBusClientOptions в качестве параметра. Установите для параметра ServiceBusClientOptions.TransportType значение ServiceBusTransportType.AmqpWebSockets.
.NET (Microsoft.Azure.ServiceBus) При создании клиентских объектов используйте конструкторы, принимающие в качестве параметров TransportType, ServiceBusConnection или ServiceBusConnectionStringBuilder.

Для конструктора, принимающего transportType в качестве параметра, установите значение TransportType.AmqpWebSockets для этого параметра.

Для конструктора, принимающего ServiceBusConnection в качестве параметра, установите для параметра ServiceBusConnection.TransportType значение TransportType.AmqpWebSockets.

Если используется ServiceBusConnectionStringBuilder, используйте конструкторы, которые позволяют указать transportType.

Java (com.azure.messaging.servicebus) При создании клиентов установите для параметра ServiceBusClientBuilder.transportType значение AmqpTransportType.AMQP.AMQP_WEB_SOCKETS
Java (com.microsoft.azure.servicebus) При создании клиентов установите для параметра transportType в com.microsoft.azure.servicebus.ClientSettings значение com.microsoft.azure.servicebus.primitives.TransportType.AMQP_WEB_SOCKETS
JavaScript При создании объектов клиентов служебной шины используйте свойство webSocketOptions в ServiceBusClientOptions.
Python При создании клиентов служебной шины установите для параметра ServiceBusClient.transport_type значение TransportType.AmqpOverWebSocket

30 сентября 2026 г. мы удалим библиотеки пакета SDK Служебная шина Azure WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus и com.microsoft.azure.servicebus, которые не соответствуют рекомендациям по пакету SDK Azure. Мы также завершим поддержку протокола SBMP, поэтому вы больше не сможете использовать этот протокол после 30 сентября 2026 года. Перейдите в последние библиотеки пакета SDK Azure, которые предлагают критически важные обновления системы безопасности и улучшенные возможности до этой даты.

Хотя старые библиотеки по-прежнему могут использоваться после 30 сентября 2026 года, они больше не будут получать официальную поддержку и обновления от Майкрософт. Дополнительные сведения см. в объявлении о выходе на пенсию в службу поддержки.

Кроме того, Служебную шину можно использовать из любого стека протокола, совместимого с AMQP 1.0:

Язык Библиотека
Java Apache Qpid Proton-J
C/C++ Azure uAMQP C, Apache Qpid Proton-C
Python Azure uAMQP для Python, Apache Qpid Proton Python
PHP Azure uAMQP для PHP
Ruby Apache Qpid Proton Ruby
Go Azure Go AMQP, Apache Qpid Proton Go
C#/F#/VB AMQP .NET Lite, Apache NMS AMQP
JavaScript/Node Rhea

Итоги

  • AMQP 1.0 — это открытый и надежный протокол обмена сообщениями, который можно использовать для создания кроссплатформенных гибридных приложений. AMQP 1.0 является стандартом OASIS.

Следующие шаги

Хотите узнать больше? Перейдите по следующим ссылкам: