Что такое 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.
Принцип работы:
- Publisher (отправитель) составляет сообщение и отправляет его в Exchange.
- Rabbitmq на основе содержания сообщений и установленных связей queue binding, отправляет сообщение из Exchange в Queue.
- 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) будут отсоединены от нее.