Полный цикл в digital

Что такое RabbitMQ

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

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

Типы взаимодействий

  1. Синхронный протокол один из примеров HTTP, клиент отправляет запрос сервису и ожидает ответа. Важной особенностью протокола HTTP/HTTPS является синхронность. Дальнейшее исполнение клиентского кода возможно только после получения ответа от сервера HTTP
  2. Асинхронный протокол пример AMQP, поддерживается многими операционными системами и облачными средами. Код клиента или отправитель сообщения обычно не ожидают ответа. Они просто отправляют сообщение в сервис передачи сообщений, такой как RabbitMQ или Kafka

Недостатки синхронного протокола

  • Если добавлять новые микросервисы, которые взаимодействуют друг с другом, то использование конечных точек в коде вызовет беспорядок. Особенно в тех случаях, когда нужно передать в конечную точку экстренную информацию, например токен авторизации
  • Ответа придется ожидать некоторое время, а при его отсутствии выполняются повторные вызовы, что снижает производительность
  • Если сервис приема данных не работает или не может обработать запрос, выполняется процедура ожидания. Например, пользователь размещает заказ в интернет-магазине. В сервис доставки отправляется запрос на отправку заказа, но если он не работает, то заказ теряется. Как отправить тот же заказ в сервис доставки после ее активации?
  • Принимающая сторона может быть временами перегружена запросами. В этом случае нужен буфер для ожидания до тех пор, пока получатель не освободится

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

Протокол AMQP

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

Для того, чтобы научить работать PHP с протоколом AMQP используются специальные обертки, я использую bunny/bunny, вот список всех возможных:

Базовые cущности RabbitMQ

  1. Message сообщение, состоящее из заголовка и тела. Заголовок-это коллекция различных атрибутов, добавленных продюсерами, в том числе: сохраняется ли сообщение, каков приоритет, какая очередь получения сообщений и т.д. Тело сообщения представляет собой данные которые нужно передать
  2. Producer отправитель, отправляющий сообщения
  3. Consumer получатель, принимающий сообщения, обычно получатель находится в состоянии ожидания сообщений
  4. Exchange обменник, в него отправляются сообщения, обменник является маршрутизатором распределяющим сообщения в одну или несколько очередей. Маршрутизация сообщений в очередь идет на основе созданных связей между обменником и очередью
  5. Queue очередь, это имя почтового ящика, который находится внутри RabbitMQ. Хотя сообщения проходят через RabbitMQ и ваше приложение, они могут храниться только внутри очереди. Очередь не имеет ограничений на количество принимаемых сообщений. По сути можно считать, что буфер является бесконечным и ограничен только ресурсами машины. Любое количество отправителей может отправлять сообщения в очередь, а любое количество получателей может попытаться получить данные из этой очереди

Методы RabbitMQ

  1. ack() подтверждает получение сообщения, удаляет сообщение из очереди
  2. reject()отвергнуть получение, можно только одно сообщение
  3. nack() отвергнуть получение, можно сразу несколько сообщений
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг