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) будут отсоединены от нее.