Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

Расширенный протокол очереди сообщений ( AMQP ) представляет собой открытый стандарт прикладного уровня протокола для сообщений-ориентированного промежуточного программного обеспечения . Определяющими характеристиками AMQP являются ориентация сообщений, организация очередей, маршрутизация (включая двухточечную и публикацию и подписку ), надежность и безопасность. [1]

AMQP определяет поведение поставщика сообщений и клиента в той степени, в которой реализации от разных поставщиков являются совместимыми , так же, как SMTP , HTTP , FTP и т. Д. Создали совместимые системы. Предыдущие стандартизация промежуточного программного обеспечения происходила на уровне API (например, JMS ) и была сосредоточена на стандартизации взаимодействия программистов с различными реализациями промежуточного программного обеспечения, а не на обеспечении взаимодействия между несколькими реализациями. [2] В отличие от JMS, который определяет API и набор поведений, которые должна обеспечивать реализация обмена сообщениями, AMQP является протоколом проводного уровня.. Протокол провод-уровень представляет собой описание формата данных , который посылается через сеть в виде потока в байтах . Следовательно, любой инструмент, который может создавать и интерпретировать сообщения, соответствующие этому формату данных, может взаимодействовать с любым другим совместимым инструментом независимо от языка реализации.

Обзор [ править ]

AMQP - это двоичный протокол прикладного уровня, разработанный для эффективной поддержки широкого спектра приложений обмена сообщениями и шаблонов связи. Он обеспечивает управляемую потоком [3] коммуникацию, ориентированную на сообщения, с гарантиями доставки сообщений, такими как не более одного раза (когда каждое сообщение доставляется один раз или никогда), не менее одного раза (когда каждое сообщение обязательно будет доставлено, но может делать это несколько раз) и ровно один раз (когда сообщение обязательно будет доставлено и поступит только один раз), [4] и аутентификация и / или шифрование на основе SASL и / или TLS . [5]Он предполагает наличие базового надежного протокола транспортного уровня, такого как протокол управления передачей (TCP). [6]

Спецификация AMQP определяется на нескольких уровнях: (i) система типов, (ii) симметричный асинхронный протокол для передачи сообщений от одного процесса к другому, (iii) стандартный расширяемый формат сообщения и (iv) набор стандартизированных, но расширяемых «возможностей обмена сообщениями».

История [ править ]

AMQP был создан в 2003 году Джоном О'Хара из JPMorgan Chase в Лондоне . [1] [7] AMQP задумывался как открытая совместная работа. Первоначальный дизайн был разработан JPMorgan Chase с середины 2004 до середины 2006 года, и он заключил контракт с iMatix Corporation на разработку брокера C и документации по протоколу. В 2005 году JPMorgan Chase обратился к другим фирмам с предложением сформировать рабочую группу, в которую вошли Cisco Systems , IONA Technologies , iMatix, Red Hat и группа по разработке стандартов рабочих процессов транзакций (TWIST). В том же году JPMorgan Chase в партнерстве с Red Hat создал Apache Qpid.изначально на Java, а вскоре после C ++. Независимо, RabbitMQ был разработан на Erlang компанией Rabbit Technologies, а затем последовали реализации Microsoft и StormMQ .

Рабочая группа выросла до 23 компаний, включая Bank of America , Barclays , Cisco Systems, Credit Suisse , Deutsche Börse , Goldman Sachs , HCL Technologies Ltd , Progress Software , IIT Software , INETCO Systems Limited , Informatica (включая 29 West), JPMorgan Chase, Корпорация Microsoft , my-Channels, Novell , Red Hat , Software AG , Solace Systems , StormMQ , Tervela Inc. , TWIST Process Innovations ltd,VMware (которая приобрела Rabbit Technologies) и WSO2 .

В августе 2011 года рабочая группа AMQP объявила о своей реорганизации в членскую секцию OASIS . [8]

AMQP 1.0 был выпущен рабочей группой AMQP 30 октября 2011 года на конференции в Нью-Йорке. На мероприятии Microsoft, Red Hat, VMware , Apache, INETCO и IIT Software продемонстрировали программное обеспечение, работающее с протоколом, в ходе демонстрации совместимости. На следующий день, 1 ноября 2011 г., было объявлено о создании Технического комитета OASIS [9] для продвижения этой внесенной версии AMQP 1.0 через процесс международных открытых стандартов. Первый проект OASIS был выпущен в феврале 2012 года [10], при этом изменения по сравнению с опубликованным Рабочей группой ограничены редактированием для большей ясности (без функциональных изменений). Второй проект был выпущен на публичное рассмотрение 20 июня (опять же без функциональных изменений).[11] и AMQP был утвержден в качестве стандарта OASIS 31 октября 2012 года. [12]

OASIS AMQP был одобрен для выпуска в качестве международного стандарта ISO и IEC в апреле 2014 года. [13] AMQP 1.0 был принят на голосование Объединенным техническим комитетом по информационным технологиям (JTC1) Международной организации по стандартизации (ISO) и Международной электротехнической комиссией (IEC). ). Утвержденному представлению OASIS AMQP присвоено обозначение ISO / IEC 19464.

Предыдущие версии AMQP: 0-8, опубликованные в июне 2006 года, 0-9, опубликованные в декабре 2006 года, 0-10, опубликованные в феврале 2008 года [14] и 0-9-1, опубликованные в ноябре 2008 года. отличается от спецификации 1.0. [15] [16]

Хотя AMQP зародился в индустрии финансовых услуг, он в целом применим к широкому кругу проблем промежуточного программного обеспечения .

Описание AMQP 1.0 [ править ]

Система типов [ править ]

AMQP определяет схему кодирования с самоописанием, позволяющую интероперабельное представление широкого диапазона обычно используемых типов. Это также позволяет аннотировать типизированные данные с дополнительным значением [17], например, конкретное строковое значение может быть аннотировано, чтобы его можно было понять как URL . Аналогичным образом значение карты, содержащее пары «ключ-значение» для «имени», «адреса» и т. Д., Может быть аннотировано как представление типа «клиент».

Система типов используется для определения формата сообщения, позволяющего выражать и понимать стандартные и расширенные метаданные обрабатывающими объектами. Он также используется для определения примитивов связи, посредством которых сообщения обмениваются между такими объектами, то есть тел кадров AMQP .

Перформативы и протокол связи [ править ]

Базовая единица данных в AMQP - это фрейм . Определено девять тел кадров AMQP, которые используются для инициирования, управления и прерывания передачи сообщений между двумя одноранговыми узлами. Это:

  • открыть ( соединение )
  • начало ( сеанс )
  • прикрепить ( ссылка )
  • передача
  • поток
  • расположение
  • отсоединить ( ссылка )
  • конец ( сеанс )
  • закрыть ( связь )

Протокол связи лежит в основе AMQP.

Прикрепить тело кадра отправляется , чтобы начать новую ссылку; открепление снести ссылку. Ссылки могут быть установлены для получения или отправки сообщений.

Сообщения отправляются по установленному каналу с использованием кадра передачи . Сообщения по ссылке текут только в одном направлении.

Передачи подлежат схеме управления потоком на основе кредита, управляемой с помощью кадров потока . Это позволяет процессу защитить себя от перегруженности слишком большим объемом сообщений или, проще говоря, позволить подписке получать сообщения по желанию. [18]

Каждое переданное сообщение должно быть окончательно урегулировано . Расчет гарантирует, что отправитель и получатель согласовывают состояние перевода, обеспечивая гарантии надежности. Изменения в состоянии и расчетах для передачи (или набора передач) передаются между одноранговыми узлами с помощью кадра диспозиции . Таким образом могут быть обеспечены различные гарантии надежности: не более одного раза, не менее одного раза и ровно один раз. [19]

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

Формат сообщения [ править ]

AMQP определяет как простое сообщение ту часть сообщения, которая создается отправляющим приложением. Это считается неизменным, поскольку сообщение передается между одним или несколькими процессами.

Обеспечение неизменности сообщения, отправляемого приложением, позволяет использовать сквозное подписание и / или шифрование сообщения и гарантирует, что любые проверки целостности (например, хэши или дайджесты ) остаются действительными. Сообщение может быть аннотировано посредниками во время передачи, но любые такие аннотации хранятся отдельно от неизменяемого простого сообщения . Аннотации могут быть добавлены до или после простого сообщения.

Заголовок представляет собой стандартный набор поставки связанных с аннотациями , которые могут быть запрошены или указанными для сообщения и включают в себя время , чтобы жить, долговечность, приоритет. [20]

Само пустое сообщение структурировано как необязательный список стандартных свойств (идентификатор сообщения, идентификатор пользователя, время создания, ответ, тема, идентификатор корреляции, идентификатор группы и т. Д.), Необязательный список свойств, специфичных для приложения (т. Е. Расширенных свойств ) и тело, которое AMQP называет данными приложения. [21]

Свойства указываются в системе типов AMQP, как и аннотации. Данные приложения могут быть любой формы и в любой кодировке по выбору приложения. Один из вариантов - использовать систему типов AMQP для отправки структурированных данных с самоописанием.

Возможности обмена сообщениями [ править ]

Протокол связи передает сообщения между двумя узлами, но очень мало предполагает, что это за узлы и как они реализованы.

Ключевая категория - это те узлы, которые используются в качестве точки встречи между отправителями и получателями сообщений (например, очередями или темами ). Спецификация AMQP называет такие узлы распределительными узлами и кодифицирует некоторые общие поведения. [22]

Это включает:

  • некоторые стандартные исходы для передач, с помощью которых получатели сообщений могут, например, принимать или отклонять сообщения [23]
  • механизм для указания или запроса одного из двух основных шаблонов распределения, конкурирующих и неконкурирующих потребителей, через режимы распределения перемещения и копирования соответственно [24]
  • возможность создавать узлы по запросу, [25] [26] например, для временных очередей ответов
  • возможность уточнения набора сообщений, представляющих интерес для получателя, с помощью фильтров [27]

Хотя AMQP можно использовать в простых одноранговых системах, определение этой структуры для возможностей обмена сообщениями дополнительно обеспечивает взаимодействие с посредниками обмена сообщениями (брокерами, мостами и т. Д.) В более крупных и богатых сетях обмена сообщениями. Указанная структура охватывает базовое поведение, но позволяет развиваться расширениям, которые могут быть далее кодифицированы и стандартизированы.

Реализации [ править ]

Реализации брокера AMQP 1.0 [ править ]

  • Apache Qpid , проект с открытым исходным кодом в Apache Foundation
  • Apache ActiveMQ , проект с открытым исходным кодом в Apache Foundation
  • Центры событий Azure [28] [29]
  • Служебная шина Azure [28] [30]
  • Solace PubSub +, мультипротокольный брокер в области оборудования, программного обеспечения и облака [31]

Реализации брокера AMQP до версии 1.0 [ править ]

  • JORAM , реализация Java с открытым исходным кодом от Консорциума OW2 .
  • Apache Qpid поддерживает несколько версий AMQP [32]
  • StormMQ , размещенная служба очереди сообщений с использованием AMQP. Предлагается как коммерческая управляемая услуга .
  • RabbitMQ , проект с открытым исходным кодом, спонсируемый Pivotal , в основном поддерживает AMQP 0-9-1, с 1.0 через экспериментальный плагин.

Спецификация [ править ]

Версия протокола AMQP 1.0 является текущей версией спецификации. В нем основное внимание уделяется основным функциям, которые необходимы для взаимодействия в масштабе Интернета. Он содержит менее явную маршрутизацию, чем предыдущие версии, потому что основные функции должны быть строго стандартизированы в первую очередь. Совместимость AMQP 1.0 была более тщательно протестирована с большим количеством разработчиков, чем предыдущие версии. [33]

Веб-сайт AMQP содержит спецификацию OASIS для версии 1.0 .

Более ранние версии AMQP, опубликованные до выпуска 1.0 (см. Историю выше) и значительно отличающиеся от него, включают:

  • AMQP 0-9-1 , у которого есть клиенты, доступные «для многих популярных языков программирования и платформ» [34]
  • AMQP 0–10

Сопоставимые характеристики [ править ]

Это известные спецификации открытого протокола, которые охватывают то же или подобное пространство, что и AMQP:

  • Streaming Text Oriented Messaging Protocol (STOMP), текстовый протокол, разработанный в Codehaus; использует семантику «места назначения», подобную JMS.
  • Расширяемый протокол обмена сообщениями и присутствия (XMPP), расширяемый протокол обмена сообщениями и присутствия.
  • MQTT , легкий протокол публикации-подписки.
  • OpenWire, используемый ActiveMQ .

Службу сообщений Java (JMS) часто сравнивают с AMQP. Однако JMS - это спецификация API (часть спецификации Java EE ), которая определяет, как реализованы производители и потребители сообщений. JMS не гарантирует взаимодействия между реализациями, и используемая система обмена сообщениями, совместимая с JMS, может нуждаться в развертывании как на клиенте, так и на сервере. С другой стороны, AMQP - это спецификация протокола на уровне проводов. Теоретически AMQP обеспечивает взаимодействие, поскольку на стороне клиента и сервера может быть развернуто различное AMQP-совместимое программное обеспечение. Обратите внимание, что, как и HTTP и XMPP , AMQP не имеет стандартного API.

См. Также [ править ]

  • Пиринговый
  • Очередь сообщений
  • Служба очереди сообщений
  • Служба распространения данных

Ссылки [ править ]

  1. ^ а б О'Хара, Дж. (2007). «На пути к промежуточному программному обеспечению массового предприятия» (PDF) . Очередь ACM . 5 (4): 48–55. DOI : 10.1145 / 1255421.1255424 .
  2. ^ Vinoski, S. (2006). «Расширенный протокол очереди сообщений» (PDF) . IEEE Internet Computing . 10 (6): 87–89. DOI : 10.1109 / MIC.2006.116 .
  3. ^ "OASIS AMQP версии 1.0, разделы 2.6.7-2.6.8" . Технический комитет OASIS AMQP . Проверено 18 июня 2012 года .
  4. ^ "OASIS AMQP версии 1.0, разделы 2.6.12-2.6.13" . Технический комитет OASIS AMQP . Проверено 18 июня 2012 года .
  5. ^ «OASIS AMQP версии 1.0, раздел 5.1» . Технический комитет OASIS AMQP . Проверено 18 июня 2012 года .
  6. ^ «OASIS AMQP версии 1.0, раздел 2.1» . Технический комитет OASIS AMQP . Проверено 18 июня 2012 года .
  7. ^ Hintjens, Pieter (7 февраля 2006). «Предыстория проекта AMQ, авторы» . iMatix Corporation . Проверено 18 февраля 2018 .
  8. ^ "Переходы рабочей группы AMQP в секцию-член OASIS" . Архивировано из оригинального 16 апреля 2012 года . Проверено 28 января 2012 года .
  9. ^ OASIS формирует технический комитет AMQP для улучшения взаимодействия с бизнес-сообщениями в промежуточном программном обеспечении, мобильных и облачных средах
  10. ^ «30-дневный общественный обзор OASIS AMQP версии 1.0» . 21 февраля 2012 . Проверено 18 июня 2012 года .
  11. ^ «15-дневный общественный обзор OASIS AMQP версии 1.0» . 20 июня 2012 . Проверено 20 июня 2012 года .
  12. ^ «AMQP 1.0 становится стандартом OASIS» . 31 октября 2012 . Проверено 1 ноября 2012 года .
  13. ^ «Информационные технологии - Спецификация Advanced Message Queuing Protocol (AMQP) v1.0» . ИСО / МЭК 19464 . ISO . Дата обращения 1 мая 2014 .
  14. ^ «Протокол заседания AMQP PMC от 13 февраля 2008 г.» . Протокол AMQP PMC . Рабочая группа AMQP. Архивировано из оригинального 30 ноября 2012 года . Проверено 15 июня 2012 года .
  15. ^ «RabbitMQ - AMQP от 0-8 до 0-9-1» . www.rabbitmq.com . Проверено 12 января 2018 .
  16. ^ rabbitmq-amqp1.0: поддержка AMQP 1.0 для RabbitMQ , RabbitMQ, 17 декабря 2017 г. , получено 12 января 2018 г.
  17. ^ "OASIS AMQP версия 1.0, раздел 1.1" . Технический комитет OASIS AMQP . Проверено 18 июня 2012 года .
  18. ^ "OASIS AMQP версии 1.0, раздел 2.6.7-2.6.9" . Технический комитет OASIS AMQP . Проверено 18 июня 2012 года .
  19. ^ «OASIS AMQP версии 1.0, раздел 2.6.12-2.6.14» . Рабочая группа AMQP . Проверено 18 июня 2012 года .
  20. ^ «OASIS AMQP версии 1.0, раздел 3.2.1» . Технический комитет OASIS AMQP . Проверено 18 июня 2012 года .
  21. ^ «OASIS AMQP версии 1.0, раздел 3.2» . Технический комитет OASIS AMQP . Проверено 18 июня 2012 года .
  22. ^ «OASIS AMQP версии 1.0, раздел 3.3» . Технический комитет OASIS AMQP . Проверено 15 июня 2012 года .
  23. ^ «OASIS AMQP версии 1.0, раздел 3.4» . Технический комитет OASIS AMQP . Проверено 18 июня 2012 года .
  24. ^ «OASIS AMQP версии 1.0, раздел 3.5.2» . Технический комитет OASIS AMQP . Проверено 18 июня 2012 года .
  25. ^ «OASIS AMQP версии 1.0, раздел 3.5.3» . Технический комитет OASIS AMQP . Проверено 18 июня 2012 года .
  26. ^ «OASIS AMQP версии 1.0, раздел 3.5.4» . Технический комитет OASIS AMQP . Проверено 18 июня 2012 года .
  27. ^ «OASIS AMQP версии 1.0, раздел 3.5.1» . Технический комитет OASIS AMQP . Проверено 18 июня 2012 года .
  28. ^ Б axisc. «AMQP 1.0 в руководстве по протоколу служебной шины и концентраторов событий Azure» . docs.microsoft.com . Проверено 21 мая 2019 .
  29. ^ Шубха Виджаясаратхи. «Что такое концентраторы событий Azure? - служба приема больших данных» . docs.microsoft.com . Проверено 21 мая 2019 .
  30. ^ axisc. «Обзор AMQP 1.0 в служебной шине Azure» . docs.microsoft.com . Проверено 21 мая 2019 .
  31. ^ "Утешение PubSub +" . solace.com .
  32. ^ https://web.archive.org/web/20130914045254/http://qpid.apache.org/releases/qpid-0.22/index.html
  33. ^ «Статус версий AMQP до 1.0» . Сайт AMQP . Проверено 28 мая 2014 .
  34. ^ «Объяснение модели AMQP 0-9-1» . VMWare, Inc . Проверено 1 ноября 2012 года .

Внешние ссылки [ править ]

  • Сайт AMQP
  • Технический комитет OASIS AMQP
  • Общий обзор AMQP и модели AMQP (версия 0-9-1)
  • OMG Анализ AMQP и сравнение с DDS-RTPS
  • Google Tech Talk с видео и слайдами о RabbitMQ
  • Презентация сообщений AMQP и RestMS на FOSDEM 2009
  • Список клиентов AMQP