Что такое 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