Amqp что это
Перейти к содержимому

Amqp что это

  • автор:

AMQP по-русски

Сегодня довольно мало информации о протоколе AMQP (Advanced Message Queueing Protocol) и его применении, особенно на русском языке. А вообще это — замечательный, уже достаточно широко поддерживаемый открытый протокол для передачи сообщений между компонентами системы с низкой задержкой и на высокой скорости. При этом семантика обмена сообщениями настраивается под нужды конкретного проекта. Такие решения существовали и ранее, но это первый стандарт, для которого существует большое количество свободных реализаций.

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

Сегодня тема доставки информации в реальном времени является крайне актуальной (достаточно вспомнить хотя бы Twitter, Google Wave). И здесь системы передачи сообщений могут служить внутренним механизмом обмена данными, который обеспечивает доставку данных (изменений данных) клиентам.

Я не ставлю своей целью сегодня рассказать о том, как писать приложения для AMQP. Хочу лишь немного рассказать о том, что это совсем не страшно, не очень сложно, и действительно работает, хотя стандарт находится еще в развитии, выходят новые версии протокола, брокеров и т.п. Но это уже вполне production-quality. Расскажу лишь базовые советы, чтобы помочь “въехать” в протокол.

Для начала, маленькая коллекция ссылок (в основном, на английском): что такое вообще обмен сообщениями и почему AMQP такой (Messaging in general and AMQP design); сравнение различных реализаций обмена сообщениями, в частности основанных на AMQP (Message Queue Comparison); клиентская библиотека AMQP для Twisted Framework (Python) с поддержкой Thrift (Thrift, AMQP in Twisted); руководство от Red Hat о том, что такое messaging и как работать с AMQP, описывает их “коробочный” продукт на основе AMQP, но подходит и для любых AMQP-брокеров (AMQP Programming Tutorial for C++, Java, and Python); достаточно много документации, описаний архитектурных решений на сайте ZeroMQ, который не совсем AMQP-брокер, но общая архитектура, детали реализации представляют отдельный интерес; обзорная статья от Duncan McGregor о txAMQP и AMQP в общем (A Simfonia on Messaging with txAMQP, II, III).

Далее необходимо выбрать AMQP-брокер, который вы будете использовать. При выборе необходимо рассматривать как собственно характеристики сервера: скорость работы, надежность, легкость установки и поддержки, но также внимательно смотреть на версию AMQP-протокола, которая поддерживается брокером, — она должна совпадать с версией клиентской AMQP-библиотеки. Из брокеров я бы посоветовал RabbitMQ, написанный на Erlang, и Qpid, версии на C++ (AMQP 0-10) и Java (0-8, 0-9).

Сам протокол AMQP устроен достаточно интересно: на самом нижнем уровне определяется формат кодирования данных в бинарный вид для передачи по TCP-соединению, выше лежит формат передачи RPC-запросов между сервером и клиентом. Сама семантика работы с сообщениями, создания очередей и т.п. описывается в XML-спецификации, которая по сути задает RPC-интерфейс сервера и клиента (примеры таких XML-файлов для версий 0-8 и 0-10). Этот XML является последней и конечной спецификацией протокола. Более того, версии протокола 0-8 и 0-10 отличаются настолько сильно, что поддерживать их одновременно вряд ли возможно в одной программе. Что еще более интересно, иногда такие spec-файлы для разных брокеров AMQP, формально поддерживающих одну и ту же версию протокола, отличаются настолько, что не являются взаимозаменяемыми. Но это скорее небольшие технические проблемы.

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

В качестве клиентской библиотеки я выбрал библиотеку txAMQP для Twisted Framework (Python). В общем и целом все работает, но где-то требуются небольшие “доделки” и “подкрутки”, которые я планирую опубликовать на launchpad. В AMQP и вокруг AMQP есть много интересного и перспективного. К примеру, брокер RabbitMQ умеет масштабироваться и работать в едином кластере. Мне кажется, это очень полезная и перспективная технология.

AMQP

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

Не ждите, пока хакеры вас взломают — подпишитесь на наш канал и станьте неприступной крепостью!

17 июля, 2023

Docker Hub — репозиторий для разработчиков или свалка конфиденциальной информации?

Исследователи из Германии обнаружили, что тысячи общедоступных образов Docker содержат высокочувствительные данные.

Понимание AMQP

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

Преимущества AMPQ перед JMS

AMPQ часто сравнивают с JMS (Java Message Service), более популярную систему обмена сообщениями в Java сообществе. Ограничение JMS заключается в том, что API определено, а формат сообщений — нет. В отличие от AMPQ, JMS не имеет требований к тому, как сообщение будет сформировано и передано. Фактически, каждый JMS брокер может создавать сообщения различного формата. Они просто должны использовать одно и то же API.

Поэтому Pivotal выпустила собственный JMS проект Rabbit, библиотеку, которая реализует JMS API, но использует RabbiMQ, AMPQ брокер для передачи сообщений.

AMPQ публикует эти спецификации в доступном для загрузки XML формате. Такая доступность делает её простой для библиотеки, поддерживаемую генерацию API по спецификации, а также автоматическую генерацию алгоритмов для сериализации и десериализации сообщений.

Эти преимущества и открытость спецификации вдохновили на создание множества брокеров, которые поддерживают AMPQ, среди которых:

AMPQ и JMS терминология

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

С оригинальным текстом урока вы можете ознакомиться на spring.io.

Учебные материалы

  • Обмен сообщениями с RabbitMQ
  • Обмен сообщениями с JMS
  • Обмен сообщениями с Redis

AMQP

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

Архитектуру протокола разработал John O’Hara из банка JP Morgan Chase & Co [1] .

Протокол

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

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

Реализация

Ссылки

Примечания

  1. Toward a Commodity Enterprise Middleware
  • Интернет-протоколы
  • Распределённые вычислительные системы
  • Middleware

Wikimedia Foundation . 2010 .

  • Active-Matrix OLED
  • AMX International AMX

Полезное

Смотреть что такое «AMQP» в других словарях:

  • AMQP — (pour Advanced Message Queuing Protocol) est un protocole pour les systèmes de messagerie orientés Middleware. L objectif d AMQP est de standardiser l échange de messages entre serveurs de message. Il peut être comparé en cela au protocole SMTP… … Wikipédia en Français
  • Advanced Message Queuing Protocol — AMQP (pour Advanced Message Queuing Protocol) est un protocole ouvert pour les systèmes de messagerie orientés intergiciel développé par la banque JPMorgan Chase[1]. L objectif d AMQP est de standardiser les échanges entre serveurs de messages en … Wikipédia en Français
  • Advanced Message Queuing Protocol — El estándar AMQP (Advanced Message Queuing Protocol) es un protocolo de estándar abierto en la capa de aplicaciones de un sistema de comunicación. Las características que definen al protocolo AMQP son la orientación a mensajes, encolamiento (… … Wikipedia Español
  • Advanced Message Queuing Protocol — The Advanced Message Queuing Protocol (AMQP) is an open standard application layer protocol for Message Oriented Middleware. The defining features of AMQP are message orientation, queuing, routing (including point to point and publish and… … Wikipedia
  • Message-oriented middleware — (MOM) is software or hardware infrastructure supporting sending and receiving messages between distributed systems. MOM allows application modules to be distributed over heterogeneous platforms and reduces the complexity of developing… … Wikipedia
  • Message Oriented Middleware — Nachrichtenorientierte Middleware bzw. Message Oriented Middleware (MOM) bezeichnet Middleware, die auf der asynchronen oder synchronen Kommunikation, also der Übertragung von Nachrichten (Messages) beruht. Das Format für die Nachrichten ist… … Deutsch Wikipedia
  • ØMQ — Developer(s) iMatix Corporation Stable release 2.1.10 / October 3, 2011; 31 days ago (2011 10 03) Preview release 3.0.2 beta / October 3, 2011; 31 days ago ( … Wikipedia
  • RabbitMQ — Тип AMQP, Middleware Разработчик SpringSource, подразделение VMware, Inc.[1] Написана на Erlang Последняя версия 3.0.0 … Википедия
  • Spring (Framework) — Spring Maintainer SpringSource Aktuelle Version 3.0.6[1] (23. August 2011) … Deutsch Wikipedia
  • Message queuing service — A message queueing service is a message oriented middleware or MOM deployed in a compute cloud using software as a service model. Service subscribers access queues and or topics to exchange data using point to point or publish and subscribe… … Wikipedia
  • Обратная связь: Техподдержка, Реклама на сайте
  • �� Путешествия

Экспорт словарей на сайты, сделанные на PHP,
WordPress, MODx.

  • Пометить текст и поделитьсяИскать в этом же словареИскать синонимы
  • Искать во всех словарях
  • Искать в переводах
  • Искать в ИнтернетеИскать в этой же категории

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *