Перейти к основному содержимому
Нормативная версия документации - английская

Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.

Модель

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

Производитель публикует в обменник, привязка копирует сообщение в очередь, потребитель читает очередь; клиенты работают через каналы одного соединенияВиртуальный хостОдно соединение TCPПроизводительпубликует с ключом маршрутизацииОбменниквыбирает очереди по своим привязкамОчередьхранит сообщения, пока потребитель их не подтвердитПотребительчитает одну очередьКанал 1Канал 2Канал nКаждая публикация и каждый потребитель работают в канале:лёгком сеансе, который соединение мультиплексирует
Схема текстом
  1. Виртуальный хост: Обменник выбирает очереди по своим привязкам; Очередь хранит сообщения, пока потребитель их не подтвердит
  2. Одно соединение TCP: Канал 1; Канал 2; Канал n
  3. Производитель публикует с ключом маршрутизации → Обменник выбирает очереди по своим привязкам: публикация
  4. Обменник выбирает очереди по своим привязкам → Очередь хранит сообщения, пока потребитель их не подтвердит: привязка
  5. Очередь хранит сообщения, пока потребитель их не подтвердит → Потребитель читает одну очередь: доставка
  6. Каждая публикация и каждый потребитель работают в канале: лёгком сеансе, который соединение мультиплексирует

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

Очередь - это хранилище, которое опустошает потребитель. Сообщение покидает очередь, когда потребитель его подтверждает. До этого сервер хранит его, а доставка, которую потребитель вернул или так и не подтвердил, возвращается в очередь.

На каждом сервере есть обменник по умолчанию с пустым именем. Каждая очередь привязана к нему под своим именем, поэтому публикация в обменник по умолчанию с ключом маршрутизации orders попадает в очередь orders. Так сервис без собственной топологии всё равно публикует в очередь.

Обменники, очереди и привязки находятся в виртуальном хосте, который указан в URI соединения. Клиент открывает одно соединение TCP и выполняет работу в каналах внутри него. Канал - лёгкий сеанс с собственным состоянием: окном предвыборки, режимом подтверждений, транзакцией. Ошибка в канале закрывает этот канал, а соединение остаётся открытым.

Модель - это AMQP 0.9.1 в реализации RabbitMQ (понятия AMQP, каналы, обменник по умолчанию). Как маршрутизирует обменник каждого типа, показывает страница Типы обменников, как очередь передаёт сообщения потребителям - страница Потребители и предвыборка, а чем различаются два типа очередей - страница Классические и кворумные очереди.