Что такое RabbitMQ

RabbitMQ - это брокер сообщений, который позволяет обмениваться сообщениями между различными программами. RabbitMQ поддерживает следующие языки: Python, Java, Ruby, PHP, C#, JavaScript, Go, Elixir, Objective-C, Swift, Spring AMQP.

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

Описание AMQP

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

Queue - Очередь, в которую попадают сообщения, которые собирает получатель (consumer).

Publisher - Отправитель сообщений.

Consumer - Получатель сообщений.

Queue binding - связь между Excahnge и Queue. Он содержит правила маршрутизации, по которым сообщения будут передаваться от Exchange к конкретным Queue.

Принцип работы:

  1. Publisher (отправитель) составляет сообщение и отправляет его в Exchange.
  2. Rabbitmq на основе содержания сообщений и установленных связей queue binding, отправляет сообщение из Exchange в Queue.
  3. Consumer (получатель) забирает сообщение из Queue, к которой он подключен.

Атрибуты сообщения:

  • correlation_id - уникальный ID Сообщения между Publisher и Consumer
  • reply_to - название очереди, куда нужно разместить ответ на сообщения. Используется для создания модели RPC.
  • routing_key - ключ маршрутизации, который используется queue binding, чтобы определить очередь в которую нужно разместить сообщение.
  • persistent - Если false, то сообщение будет удалено из брокера после его перезапуска
  • expiration - Время жизни сообщения в очереди. Если в течении этого времени Consumer не заберет сообщение из очереди, то оно будет удалено из нее.

Атрибуты Exchange:

  • Type - тип узла:
    • Direct - маршрутизация до очереди будет осуществляться по routing_key (точное соответствие).
    • Fanout - сообщения будут отосланы все присоединенным очередям.
    • Topic - сообщения будут маршрутизированы на основе шаблона ключа roting_key. Работает медленнее, чем тип direct.
    • Headers - сообщения будут маршрутизированы в соответствии с заголовками.
  • Durability - Отвечает на вопрос, будет ли существовать узел, после перезапуска брокера.
  • Auto delete - Автоматическое удаление узла, когда все очереди будут отсоединены от узла.

Атрибуты Queue:

  • Exclusive - Если true, то данная очередь может принадлежать только текущему соединению.
  • Durability - Отвечает на вопрос, будет ли существовать очередь, после перезапуска брокера.
  • Auto delete - Автоматическое удаление очереди, когда все получатели (consumer) будут отсоединены от нее.

Материалы

  1. Сайт RabbitMQ
  2. Спецификация AMQP 1.0
  3. Описание NodeJS API
  4. Установка RabbitMQ в Docker контейнер
  5. Максим Коновалов - Java Messaging с помощью AMQP и RabbitMQ, ч.1
  6. Максим Коновалов - Java Messaging с помощью AMQP и RabbitMQ, ч.2
  7. RabbitMQ Simulator