架构师_程序员_码农网

Имя пользователя Получить пароль
Регистрация

QQ登录

Всего один шаг, чтобы начать

Поиск
Просмотров:1970|Ответов: 0
打印 上一主题 下一主题

Протоколы AMQP

[копировать ссылку]
обувь jordan для продажи
Подъемник прямо к 跳转到指定楼层
владелец здания
发表于 2022-8-14 23:22:55|只看该作者回帖奖励|Реверсивныйпросмотр|Режим чтения
Введение в AMQP

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

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

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

AMQP и JMS

JMS была ранней попыткой стандартизировать промежуточное ПО для обмена сообщениями, но она была стандартизирована только на уровне API и была далека от создания функциональной совместимости.

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

Основные компоненты AMQP



Продюсер.

Производит сообщение.

ConnectionFactory(ConnectionFactory)

Производственное соединение фабрики.

Connection (Connection)

Соединение, приложение с сетевым соединением Брокера TCP/IP/три рукопожатия и четыре рукопожатия.

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

Канал

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

Если Соединение сравнивается с волоконно-оптическим кабелем, то Канал сравнивается с волоконно-оптическим кабелем в одном из пучков волокна. В соединении может быть создано любое количество каналов.

Большинство наших бизнес-операций выполняются в интерфейсе Channel, включая.


  • Объявление очереди queueDeclare Объявление коммутатора exchangeDeclare Связывание очереди queueBind Публикация сообщения basicPublish Потребление сообщения basicConsume и т. д.



Брокер (промежуточное ПО)

Принимает клиентские соединения, реализация AMQP-сервисов сущностей, таких как rabbitmq.

VirtualHost (виртуальный хост)

Виртуальный хост для логической изоляции, виртуальный хост может иметь несколько Exchange и Queue, один и тот же виртуальный хост не может иметь одинаковое имя внутри Exchange.

Для того чтобы реализовать несколько изолированных сред (пользователей, групп пользователей, коммутаторов, очередей и т. д.) на одном агенте, AMQP предоставляет концепцию виртуальных хостов (vhosts). Это очень похоже на концепцию виртуальных хостов веб-серверов, которая обеспечивает полностью изолированную среду для AMQP-сущностей. Когда устанавливается соединение, AMQP-клиент указывает, какой виртуальный хост использовать.

Обмен

Коммутатор, принимающий сообщения и отправляющий их в связанную очередь на основе ключа маршрутизации (без возможности хранения сообщений).

Коммутатор - это AMQP-сущность, используемая для отправки сообщений. Коммутатор получает сообщение и направляет его в одну или ноль очередей. Какой алгоритм маршрутизации он использует, определяется типом коммутатора и правилами Bindings.

Тип коммутатора:



  • Прямой обмен Обмен по фанату Обмен по темам Обмен по заголовкам



Свойства коммутатора:


  • Имя: имя обмена Долговечность: флаг персистентности, указывающий, является ли этот обмен персистентным Автоудаление: флаг удаления, указывающий, удаляются ли все очереди после завершения использования этого обмена Аргументы: сами агенты зависимостей


Статус обмена:


  • постоянный (долговременный) переходный


Постоянные обмены сохранятся после перезапуска агента сообщений (брокера), а переходные - нет (они должны быть объявлены снова после того, как агент снова выйдет в сеть).


Обмен по умолчанию

Обмен по умолчанию - это фактически прямой обмен, который предварительно объявляется брокером сообщений и не имеет имени (имя - пустая строка).

Вы можете рассматривать обмен по умолчанию как специальный прямой обмен.
Имя коммутатора по умолчанию: пустая строка (AMQP по умолчанию)
Тип переключателя по умолчанию: прямой обмен

Когда вы создаете очередь, если вы не указали коммутатор для привязки, вы автоматически привязываетесь к коммутатору по умолчанию с тем же ключом маршрутизации, что и имя очереди.

Коммутатор прямого подключения

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

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

Очереди для непосредственно подключенных коммутаторов обычно распределяют задания между несколькими потребителями по кругу (мы называем это опросом).

Рабочий процесс:


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





Веерный переключатель

Вентиляторный коммутатор направляет сообщения во все очереди, привязанные к нему, независимо от ключа маршрутизации привязки.

Если к определенному веерному коммутатору привязано N очередей, то при отправке сообщения на этот веерный коммутатор он отправляет копию сообщения в каждую из этих N очередей. Вентиляторные коммутаторы обычно используются для широковещательной маршрутизации сообщений.




Сценарий применения:

Широковещательная рассылка сообщений;
Функция группового чата.

Переключатель тем

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

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

Согласен:

  • Для нечеткого соответствия в ключе привязки могут присутствовать два специальных символа * и #.

  • Где * используется для соответствия одному слову, а # - для соответствия нескольким словам (которые могут быть нулевыми), ключ маршрутизации - это строка, разделенная точками (мы называем каждый отдельный сегмент строки, разделенный точкой, словом)





  • Когда производитель отправляет сообщение Routing Key=A.A.A, в этот момент оно удовлетворяет только A.*.
  • *, будет направлено только в очередь1; Когда производитель отправляет сообщение Routing Key=A.B.A, в этот момент оно удовлетворяет и A.*.
  • * и *.B.*, будут направлены в очередь1, очередь2; Когда производитель отправляет сообщение Routing Key=A.B.C, это время удовлетворяет A.*. * и *.B.* и *.
    *.C будут направлены в очереди1, очереди2 и очереди3.


Сценарий применения:

  • Обновление новостей с использованием категорий или тегов; фоновые задачи выполняются несколькими работниками (workers), каждый из которых отвечает за выполнение определенной задачи.



Переключатель заголовков

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

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

Рабочий процесс:


  • При привязке очереди к переключателю заголовков одновременно будет привязано несколько заголовков для сопоставления; входящие сообщения будут нести заголовок, а также будут иметь параметр "x-match". Когда параметр "x-match" имеет значение "any", любое значение заголовка сообщения, которое сопоставляется, будет удовлетворять условию, а когда "x-match" имеет значение "all", все значения в заголовке сообщения должны быть сопоставлены.



Краткое описание переключателя



Связка

Виртуальное соединение между Exchange и Queue.

BindingKey - это описание правила связывания Exchange и Queue. Binding Key указывает текущему Exchange, какой Routing Key будет отправлен текущему связывающему Queue.

Ключ маршрутизации

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

Взаимосвязь между ключом привязки и ключом маршрутизации


  • Ключ привязки - это ключ привязки между очередью и коммутатором; Ключ маршрутизации - это сообщение, отправленное производителем коммутатору; когда ключ привязки и ключ маршрутизации могут соответствовать друг другу, сообщение будет помещено в соответствующую очередь.



Binding Key - это описание правил связывания Exchange и Queue, это описание используется для разбора, когда Exchange получает сообщение, сообщение, полученное Exchange, будет с полем Routing Key, Exchange основывается на Routing Key и текущем Exchange, чтобы сделать соответствие, если оно соответствует Binding Key, Exchange будет соответствовать со всеми ключами связывания. Обменник сопоставляет данный ключ маршрутизации со всеми ключами привязки, которые в данный момент привязаны к обмену, и, если требования удовлетворены, отправляет сообщение в очередь, привязанную к ключу привязки.

Ключ привязки и ключ маршрутизации в различных коммутаторах


Коммутатор по умолчанию: Ключ привязки - это имя очереди, которое не может быть настроено; Ключ маршрутизации может быть успешно направлен в очередь, только если он также является именем очереди.
Коммутатор прямого подключения: Ключ привязки - имя очереди, может быть настроен; Ключ маршрутизации совпадает с Ключом привязки для успешной маршрутизации в очередь.
Секторный коммутатор: нет ключа привязки и, конечно, нет ключа маршрутизации, автоматически маршрутизирует ко всем очередям, привязанным к коммутатору.
Тематический переключатель: пользовательский ключ привязки; пользовательский ключ маршрутизации, ключ маршрутизации==ключ привязки, успешное нечеткое совпадение для успешной маршрутизации в очередь.
Переключатель заголовков: без ключа привязки; конечно, без ключа маршрутизации, соответствие в соответствии с атрибутом заголовков в отправленном сообщении.


Очередь

Хранит сообщения, которые будут потребляться приложением.

Свойства очереди:

  • Name: имя очереди Durable: очередь продолжает существовать после перезапуска брокера сообщений Exclusive: используется только одним соединением, и очередь удаляется при закрытии соединения Auto-delete: удаляется при отмене подписки последнего потребителя Arguments: используется некоторыми брокерами сообщений для выполнения дополнительных
функций, аналогичных TTL



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

Постоянство очереди:
Постоянная очередь хранится на диске и сохраняется там при перезапуске брокера сообщений. Очереди, которые не сохраняются, называются переходными. Не во всех сценариях и случаях требуется постоянство очереди.

Постоянная очередь не делает сообщения, направляемые в нее, постоянными. Если брокер сообщений зависает и перезапускается, постоянные очереди будут повторно объявлены во время перезапуска, и в любом случае будут возобновлены только те сообщения, которые были сохранены.

Потребитель

Потребители потребляют сообщения. В AMQP есть два способа для потребителя получить сообщение для потребления:

Посредник сообщений передает сообщение потребителю (push API).
Потребители получают сообщения по собственной инициативе (pull API).
Обратите внимание, что когда несколько потребителей прослушивают одну и ту же очередь, сообщения в очереди будут потребляться только одним из потребителей (а не каждым потребителем по одному разу).

Сообщение

Сообщение, данные, передаваемые между сервисом и приложением, состоит из свойств и тела.

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

Свойства сообщения:

  • Тип содержимого Кодировка содержимого Ключ маршрутизации Режим доставки (постоянный или нет) Режим доставки (постоянный или непостоянный) Приоритет сообщения Сообщение

  • метка времени публикации Срок действия Идентификатор приложения-издателя


Тело сообщения:
AMQP-сообщения содержат, помимо атрибутов, полезную нагрузку (фактические данные, содержащиеся в сообщении), которая рассматривается AMQP-агентом как непрозрачный массив байтов.

Полезная нагрузка не проверяется и не изменяется брокером сообщений. Сообщение может содержать только атрибуты без полезной нагрузки. Обычно в нем используются данные сериализованного формата, например JSON, а для сохранения буферы протоколов и MessagePacks сериализуют структурированные данные для публикации в качестве полезной нагрузки сообщения.AMQP и его аналоги обычно используют поля "content-type" и "content-encoding" поля для связи с сообщениями для идентификации полезной нагрузки, но это основано только на условностях.

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

Простая отправка сообщения на постоянный коммутатор или маршрутизация его в постоянную очередь не делает сообщение постоянным: постоянство сообщения полностью зависит от режима постоянства самого сообщения.

Публикация сообщений в постоянном режиме влияет на производительность.

Как работает AMQP

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

Обменник распределяет полученное сообщение по очередям, связанным с ним, в соответствии с правилами маршрутизации.

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

Механизм обмена сообщениями AMQP

Подтверждение сообщений

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

В AMQP есть два режима квитирования сообщений:

Автоматический режим подтверждения: удаляет сообщение, как только промежуточное ПО отправляет его потребителю. (Используйте методы AMQP: basic.deliver или basic.get-ok)
Режим явного подтверждения: удаление сообщения после того, как потребитель отправит подтверждение. (Используйте метод AMQP: basic.ack)
Если потребитель зависает, не отправив подтверждения, AMQP-агент повторно доставляет сообщение другому потребителю. Если в это время больше нет доступных потребителей, агент сообщений ждет, пока следующий потребитель зарегистрируется в этой очереди, и затем пытается доставить сообщение снова.

Отклонение сообщений

Когда потребитель получает сообщение, процесс может быть успешным или неудачным. Потребитель может указать брокеру сообщений (промежуточному ПО), что сообщение не прошло (или не завершилось в данный момент) из-за "отклоненного сообщения".
Когда сообщение отклонено, потребитель может указать брокеру сообщений, что делать с сообщением - уничтожить его или вернуть в очередь.

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

В AMQP для выполнения действия по отклонению сообщения используется метод basic.reject. Но у basic.reject есть ограничение: вы не можете использовать его для отклонения нескольких сообщений с подтверждениями. Но если вы используете RabbitMQ, вы можете использовать расширение AMQP 0-9-1, называемое отрицательными подтверждениями (также известное как nacks), чтобы обойти эту проблему.


Оригинал статьи: https: //blog.csdn.net/JokerLJG/article/details/123007557





Предыдущая статья:Массив JS, его различие и использование
Следующая статья:Детали архитектуры сообщений AMQP RabbitMQ

Похожие посты

Код фермерской сети, публикуется только в процессе практики, возникли технические трудности, не вводите в заблуждение других.
Вы должны войти в систему, прежде чем сможете отправлять сообщения назад Войти | Зарегистрироваться

Эта версия интегральных правил


DISCLAIMER: Все программное обеспечение, материалы по программированию или статьи, опубликованные Code Farmer, предназначены только для использования в учебных и исследовательских целях; вышеуказанное содержимое не должно использоваться в коммерческих или незаконных целях, в противном случае все последствия будут возложены на самих пользователей. Это сайт информации из сети, спор об авторских правах не имеет никакого отношения к этому сайту. Вы должны полностью удалить вышеуказанное содержимое со своего компьютера в течение 24 часов после загрузки. Если вам понравилась программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшее подлинное обслуживание. Если есть какие-либо нарушения, пожалуйста, свяжитесь с нами по электронной почте, чтобы разобраться с этим.

Почта To:help@itsvse.com

QQ| ( 鲁ICP备14021824号-2)|Sitemap

GMT+8, 2024-9-19 05:00

Быстрый ответНазад к началуНазад к списку