Расширенный протокол очереди сообщений
Протокол связи | |
Аббревиатура | AMQP |
---|---|
Цель | Промежуточное программное обеспечение, ориентированное на сообщения |
Разработчик(и) | Рабочая группа AMQP ( ОАЗИС ) |
Введение | 2003 год |
Уровень OSI | прикладной уровень (уровень 7) |
Веб-сайт | www |
Advanced Message Queuing Protocol ( 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 Corporation , my-Channels, Novell , Red Hat , Software AG , Solace Systems , StormMQ, Tervela Inc. , TWIST Process Innovations ltd, VMware (которая приобрела Rabbit Technologies) и WSO2 .
В 2008 году Питер Хинтдженс , генеральный директор и главный разработчик программного обеспечения iMatix, написал статью под названием «Что не так с AMQP (и как это исправить)». [ 8 ] и передал его рабочей группе, чтобы предупредить о неизбежном сбое, выявить проблемы, обнаруженные iMatix, и предложить способы исправления спецификации AMQP. К тому времени iMatix уже начала работу над ZeroMQ . В 2010 году Хинтдженс объявил, что iMatix покинет рабочую группу AMQP и не планирует поддерживать AMQP/1.0 в пользу значительно более простого и быстрого ZeroMQ. [ 9 ]
В августе 2011 года рабочая группа AMQP объявила о своей реорганизации в секцию членов OASIS . [ 10 ]
AMQP 1.0 был выпущен рабочей группой AMQP 30 октября 2011 года на конференции в Нью-Йорке. На мероприятии Microsoft, Red Hat, VMware , Apache, INETCO и IIT Software продемонстрировали программное обеспечение, работающее по этому протоколу, в ходе демонстрации совместимости. о создании Технического комитета ОАЗИСа. На следующий день, 1 ноября 2011 г., было объявлено [ 11 ] для продвижения этой версии AMQP 1.0 через международный процесс открытых стандартов. Первый проект OASIS был выпущен в феврале 2012 года. [ 12 ] изменения по сравнению с изменениями, опубликованными Рабочей группой, ограничиваются правками для большей ясности (без функциональных изменений). Второй проект был выпущен на публичное рассмотрение 20 июня (опять же без функциональных изменений). [ 13 ] AMQP был утвержден в качестве стандарта OASIS 31 октября 2012 года. [ 14 ]
OASIS AMQP был одобрен к выпуску в качестве международного стандарта ISO и IEC в апреле 2014 года. [ 15 ] AMQP 1.0 был одобрен Объединенным техническим комитетом по информационным технологиям (JTC1) Международной организации по стандартизации (ISO) и Международной электротехнической комиссии (IEC). Утверждённому представлению OASIS AMQP присвоено обозначение ISO/IEC 19464.
Предыдущие версии AMQP: 0–8, опубликованные в июне 2006 г., 0–9, опубликованные в декабре 2006 г., 0–10, опубликованные в феврале 2008 г. [ 16 ] и 0-9-1, опубликованные в ноябре 2008 года. Эти более ранние выпуски существенно отличаются от спецификации 1.0. [ 17 ] [ 18 ]
Хотя AMQP зародился в сфере финансовых услуг, он в целом применим для широкого спектра задач промежуточного программного обеспечения .
Описание AMQP 1.0
[ редактировать ]Типовая система
[ редактировать ]AMQP определяет схему кодирования с самоописанием , позволяющую интероперабельно представлять широкий спектр часто используемых типов. типизированные данные Это также позволяет аннотировать дополнительным смыслом, [ 19 ] например, определенное строковое значение может быть аннотировано, чтобы его можно было воспринимать как URL-адрес . Аналогично, значение карты, содержащее пары ключ-значение для «имя», «адрес» и т. д., может быть аннотировано как представление типа «клиент».
Система типов используется для определения формата сообщения, позволяющего выражать и понимать обрабатывающие объекты стандартные и расширенные метаданные. Он также используется для определения примитивов связи, посредством которых происходит обмен сообщениями между такими объектами, т. е. телами кадров AMQP .
Перформативы и протокол связи
[ редактировать ]Базовой единицей данных в AMQP является кадр . Определено девять тел кадров AMQP, которые используются для инициирования, управления и прекращения передачи сообщений между двумя узлами. Это:
- открыть ( соединение )
- начать ( сеанс )
- прикрепить ( ссылку )
- передача
- поток
- расположение
- отсоединить ( ссылку )
- конец ( сеанса )
- закрыть ( соединение )
Протокол связи лежит в основе AMQP.
Тело кадра присоединения отправляется для инициирования нового соединения; отсоединение , чтобы разорвать ссылку. Ссылки могут быть установлены для получения или отправки сообщений.
Сообщения передаются по установленному каналу связи с использованием кадра передачи . Сообщения по ссылке передаются только в одном направлении.
Переводы подчиняются схеме управления потоками на основе кредитов, управляемой с использованием фреймов потоков . Это позволяет процессу защитить себя от перегрузки слишком большим объемом сообщений или, проще говоря, разрешить ссылке подписки получать сообщения по мере необходимости. [ 20 ]
Каждое переданное сообщение должно в конечном итоге быть урегулировано . Расчет гарантирует, что отправитель и получатель согласуют состояние перевода, обеспечивая гарантии надежности. Изменения в состоянии и расчете для перевода (или набора переводов) передаются между узлами с использованием структуры диспозиции . Таким образом могут быть реализованы различные гарантии надежности: не более одного раза, не менее одного раза и ровно один раз. [ 21 ]
Несколько ссылок в обоих направлениях могут быть сгруппированы в сеанс . Сеанс — это двунаправленный последовательный диалог между двумя узлами, который начинается с начального кадра и завершается конечным кадром. Соединение между двумя узлами может иметь несколько мультиплексированных сеансов, каждый из которых логически независим. Соединения инициируются открытым кадром, в котором выражаются возможности отправляющего узла, и завершаются закрытым кадром .
Формат сообщения
[ редактировать ]AMQP определяет как пустое сообщение ту часть сообщения, которая создается отправляющим приложением. Это считается неизменным, поскольку сообщение передается между одним или несколькими процессами.
Обеспечение неизменности сообщения, отправленного приложением, позволяет осуществлять сквозную подпись и/или шифрование сообщения , а также гарантирует, что любые проверки целостности (например, хэши или дайджесты ) остаются действительными. Сообщение может быть аннотировано посредниками во время передачи, но любые такие аннотации сохраняются отдельно от неизменяемого пустого сообщения . Аннотации могут быть добавлены до или после основного сообщения.
Заголовок . — это стандартный набор аннотаций, связанных с доставкой, которые можно запрашивать или указывать для сообщения и включают в себя время жизни, долговечность и приоритет [ 22 ]
Само сообщение структурировано как необязательный список стандартных свойств (идентификатор сообщения, идентификатор пользователя, время создания, ответ, тема, идентификатор корреляции, идентификатор группы и т. д.), необязательный список свойства, специфичные для приложения (т. е. расширенные свойства), и тело, которое AMQP называет данными приложения. [ 23 ]
Свойства указываются в системе типов AMQP, как и аннотации. Данные приложения могут иметь любую форму и любую кодировку, выбранную приложением. Один из вариантов — использовать систему типов AMQP для отправки структурированных данных с самоописанием.
Возможности обмена сообщениями
[ редактировать ]Протокол связи передает сообщения между двумя узлами , но мало что предполагает относительно того, что это за узлы и как они реализованы.
Ключевой категорией являются узлы, используемые в качестве точки встречи между отправителями и получателями сообщений (например, очереди или темы ). Спецификация AMQP называет такие узлы узлами распределения и кодифицирует некоторые общие модели поведения. [ 24 ]
Это включает в себя:
- некоторые стандартные результаты передачи, посредством которых получатели сообщений могут, например, принимать или отклонять сообщения [ 25 ]
- механизм указания или запроса одной из двух основных моделей распределения, конкурирующих и неконкурирующих потребителей, посредством режимов распределения, перемещающих и копирующих соответственно [ 26 ]
- возможность создавать узлы по требованию, [ 27 ] [ 28 ] например, для временных очередей ответов
- возможность уточнить набор сообщений, интересующих получателя, через фильтры [ 29 ]
Хотя AMQP можно использовать в простых одноранговых системах, определение этой структуры для возможностей обмена сообщениями дополнительно обеспечивает совместимость с посредниками обмена сообщениями (брокерами, мостами и т. д.). в более крупных и богатых сетях обмена сообщениями. Указанная структура охватывает базовые модели поведения, но допускает развитие расширений, которые можно в дальнейшем кодифицировать и стандартизировать.
Реализации
[ редактировать ]Реализации брокера AMQP 1.0
[ редактировать ]- Apache Qpid — с открытым исходным кодом проект Apache Foundation.
- Apache ActiveMQ — с открытым исходным кодом проект Apache Foundation.
- Azure Центры событий [ 30 ] [ 31 ]
- Azure Служебная шина [ 30 ] [ 32 ]
- IBM MQ [ 33 ] [ 34 ]
- Solace PubSub+, многопротокольный брокер в области оборудования, программного обеспечения и облака [ 35 ]
Реализации брокера AMQP до версии 1.0
[ редактировать ]- JORAM — реализация Java с открытым исходным кодом от Консорциума OW2 .
- Apache Qpid поддерживает поддержку нескольких версий AMQP. [ 36 ]
- RabbitMQ , проект с открытым исходным кодом, спонсируемый VMware , в первую очередь поддерживает AMQP 0-9-1, а также версию 1.0 через плагин.
Спецификация
[ редактировать ]Протокол AMQP версии 1.0 является текущей версией спецификации. Основное внимание уделяется основным функциям, которые необходимы для взаимодействия в масштабах Интернета. Он содержит менее явную маршрутизацию, чем предыдущие версии, поскольку основные функции впервые строго стандартизированы. Совместимость AMQP 1.0 была более тщательно протестирована с участием большего числа разработчиков, чем предыдущие версии. [ 37 ]
На сайте AMQP размещена спецификация OASIS для версии 1.0 .
Более ранние версии AMQP, опубликованные до выпуска 1.0 (см. Историю выше) и существенно отличающиеся от него, включают:
- AMQP 0-9-1 , у которого есть клиенты «для многих популярных языков программирования и платформ». [ 38 ]
- AMQP 0–10
Сопоставимые характеристики
[ редактировать ]Эти спецификации открытого протокола охватывают ту же или аналогичную область, что и AMQP:
- Протокол потокового текстового обмена сообщениями (STOMP), текстовый протокол, разработанный в Codehaus; использует JMS-подобную семантику «пункт назначения».
- Расширяемый протокол обмена сообщениями и присутствия (XMPP), расширяемый протокол обмена сообщениями и присутствия.
- MQTT — облегченный протокол публикации-подписки.
- OpenWire , используемый ActiveMQ .
Службу сообщений Java (JMS) часто сравнивают с AMQP. Однако JMS — это спецификация API (часть спецификации Java EE ), которая определяет, как реализуются производители и потребители сообщений. JMS не гарантирует совместимость между реализациями, и используемую JMS-совместимую систему обмена сообщениями , возможно, придется развернуть как на клиенте, так и на сервере. С другой стороны, AMQP — это спецификация протокола проводного уровня. Теоретически AMQP обеспечивает совместимость, поскольку на стороне клиента и сервера можно развертывать различное AMQP-совместимое программное обеспечение.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Перейти обратно: а б О'Хара, Дж. (2007). «На пути к промежуточному программному обеспечению массового предприятия» . Очередь АКМ . 5 (4): 48–55. дои : 10.1145/1255421.1255424 .
- ^ Виноски, С. (2006). «Расширенный протокол очереди сообщений» (PDF) . IEEE Интернет-вычисления . 10 (6): 87–89. дои : 10.1109/MIC.2006.116 . S2CID 14211884 .
- ^ «OASIS AMQP версия 1.0, разделы 2.6.7-2.6.8» . Технический комитет OASIS AMQP . Проверено 18 июня 2012 г.
- ^ «OASIS AMQP версия 1.0, разделы 2.6.12-2.6.13» . Технический комитет OASIS AMQP . Проверено 18 июня 2012 г.
- ^ «OASIS AMQP версия 1.0, раздел 5.1» . Технический комитет OASIS AMQP . Проверено 18 июня 2012 г.
- ^ «OASIS AMQP версия 1.0, раздел 2.1» . Технический комитет OASIS AMQP . Проверено 18 июня 2012 г.
- ^ Хинтдженс, Питер (7 февраля 2006 г.). «Предыстория проекта AMQ, авторы» . Компания iMatix . Проверено 18 февраля 2018 г.
- ^ Хинтдженс, Питер. «Что не так с AMQP (и как это исправить)» . iMatix . Архивировано из оригинала 6 сентября 2011 года . Проверено 1 марта 2024 г.
- ^ Хинтдженс, Питер (30 марта 2010 г.). «iMatix прекратит поддержку OpenAMQ к 2011 году» . Список рассылки openamq-dev . Архивировано из оригинала 2 апреля 2010 года . Проверено 1 марта 2024 г.
- ^ «Переход рабочей группы AMQP в секцию членов OASIS» . Архивировано из оригинала 16 апреля 2012 года . Проверено 28 января 2012 г.
- ^ OASIS формирует технический комитет AMQP для улучшения совместимости бизнес-сообщений в промежуточном программном обеспечении, мобильных и облачных средах.
- ^ «30-дневное публичное рассмотрение OASIS AMQP версии 1.0» . 21 февраля 2012 года . Проверено 18 июня 2012 г.
- ^ «15-дневное публичное рассмотрение OASIS AMQP версии 1.0» . 20 июня 2012 года . Проверено 20 июня 2012 г.
- ^ «AMQP 1.0 становится стандартом OASIS» . 31 октября 2012 года . Проверено 1 ноября 2012 г.
- ^ «Информационные технологии — спецификация расширенного протокола очереди сообщений (AMQP) v1.0» . ИСО/МЭК 19464 . ИСО . Проверено 1 мая 2014 г.
- ^ «Протокол заседания AMQP PMC от 13 февраля 2008 г.» . Протокол AMQP PMC . Рабочая группа AMQP. Архивировано из оригинала 30 ноября 2012 года . Проверено 15 июня 2012 г.
- ^ «RabbitMQ — AMQP от 0-8 до 0-9-1» . www.rabbitmq.com . Проверено 12 января 2018 г.
- ^ RabbitMQ-amqp1.0: поддержка AMQP 1.0 для RabbitMQ , RabbitMQ, 17 декабря 2017 г. , получено 12 января 2018 г.
- ^ «OASIS AMQP версия 1.0, раздел 1.1» . Технический комитет OASIS AMQP . Проверено 18 июня 2012 г.
- ^ «OASIS AMQP версия 1.0, раздел 2.6.7-2.6.9» . Технический комитет OASIS AMQP . Проверено 18 июня 2012 г.
- ^ «OASIS AMQP версия 1.0, раздел 2.6.12-2.6.14» . Рабочая группа AMQP . Проверено 18 июня 2012 г.
- ^ «OASIS AMQP версия 1.0, раздел 3.2.1» . Технический комитет OASIS AMQP . Проверено 18 июня 2012 г.
- ^ «OASIS AMQP версия 1.0, раздел 3.2» . Технический комитет OASIS AMQP . Проверено 18 июня 2012 г.
- ^ «OASIS AMQP версия 1.0, раздел 3.3» . Технический комитет OASIS AMQP . Проверено 15 июня 2012 г.
- ^ «OASIS AMQP версия 1.0, раздел 3.4» . Технический комитет OASIS AMQP . Проверено 18 июня 2012 г.
- ^ «OASIS AMQP версия 1.0, раздел 3.5.2» . Технический комитет OASIS AMQP . Проверено 18 июня 2012 г.
- ^ «OASIS AMQP версия 1.0, раздел 3.5.3» . Технический комитет OASIS AMQP . Проверено 18 июня 2012 г.
- ^ «OASIS AMQP версия 1.0, раздел 3.5.4» . Технический комитет OASIS AMQP . Проверено 18 июня 2012 г.
- ^ «OASIS AMQP версия 1.0, раздел 3.5.1» . Технический комитет OASIS AMQP . Проверено 18 июня 2012 г.
- ^ Перейти обратно: а б осьc. «Руководство по протоколам AMQP 1.0 в Azure Service Bus и Центрах событий» . docs.microsoft.com . Проверено 21 мая 2019 г.
- ^ Шубха Виджая Саратхи. «Что такое Центры событий Azure? — служба приема больших данных» . docs.microsoft.com . Проверено 21 мая 2019 г.
- ^ осьc. «Обзор AMQP 1.0 в служебной шине Azure» . docs.microsoft.com . Проверено 21 мая 2019 г.
- ^ «ИБМ МК» . www.ibm.com . Проверено 15 марта 2024 г.
- ^ «О IBM MQ» . www.ibm.com . Проверено 15 марта 2024 г.
- ^ «Утешение PubSub+» . Solace.com .
- ^ Qpid 0.22 - Apache Qpid™
- ^ «Состояние версий AMQP до 1.0» . Сайт AMQP . Проверено 28 мая 2014 г.
- ^ «Объяснение модели AMQP 0-9-1» . VMWare, Inc. Проверено 1 ноября 2012 г.