Общие упрощенные понятия. Возможно существуют способы задать другое поведение нежели данное упощенное.
Основные понятия RabbitMQ
- producer – отправитель, программный код, который отправляет сообщение.
- consumer – получатель, программный код, который должен получить сообшение.
- exchange – обменник, функционал RabbitMQ, получает сообщение с заданными параметрами от отправителя и:
- может сбросить(удалить) сообщение или вернуть отправителю (зависит от атрибутов сообщения),
- может отправить сообщение в очередь,
- может отправить сообщение в несколько очередей (сообщение будет скопировано для каждой очереди)
- queue – очередь, функционал RabbitMQ, хранит все сообщения и раздает их получателям.
- message – сообщение, содержит атрибуты необходимые RabbitMQ, а также данные для передачи от отправителя к получателю
- binding – связывание очереди и обменника. Обменник может отправить сообщения только в те очереди которые с ним связаны.
- routingKey – ключ маршрутизации (может не использоваться), используется обменником для маршрутизации (выбора очереди(ей)) сообщений.
- используется при связывании очереди с обменником
- содержится в атрибуте сообщения при совпадении этих ключей сообщение будет отправлено в очередь
Обменник
Default exchange
RabbitMQ всегда создает безымянный обменник типа direct. На этот обменник по умолчанию завязаны все очереди, где routingKey равен имени очереди. Отправка сообщения напрямую в очередь на самом деле это отправка сообщения безымянному обменнику с routingKey нужной очереди. Как итог это выглядит и работает как отправка сообщения напрямую в очередь, но сообщения всегда отправляются через обменник.
Тип обменика (один из четырех вариантов)
- direct – прямая отправка в очередь, используется routingKey. Сообщение с каким-то routingKey будет отправленно обменником в очередь связанную с этим обменником с тем же routingKey, иначе сброшено(удалено).
- fanout – routingKey игнорируется, сообщения будут отправлены во все очереди связанные с обменником
- topic – похож на direct, сообщения отправляются с routingKey, но очереди связываются с обменником по шаблонной строке, сообщение попадет в те очереди с шаблонами которых совпадает routingKey
- headers – (todo)
Создание обменника
Необходимо указать:
- имя очереди
- имя обменника
- шаблон или routingKey (зависит от типа обменника)
- тип обменника
- перечень аргументов
- durable (bool) – сохранять и восстанавливать после рестарта RabbitMQ
- autoDelete (bool) – удалится после того как все очереди отключатся
- (todo)
Очередь
Перед использованием должны быть созданы. Повторное создание с теми же аргументами не создаст ошибки и не создаст еще одну очередь. Повторное создание с другими аргументами создаст ошибку.
Создание очереди
- имя очереди (опционально), RabbitMQ сгенерирует имя при необходимости
- опции
- exclusive – используется только данным подключением, будет удалено после закрытия подключения
- durable – сохранение после рестарта
- autoDelete – удалится если кол-во получетелей станет ноль
- maxPriority – очередь станет поддерживать приоритетные сообщения с приоритетом от 0 до maxPriority, чем выше число тем приоритетнее
- (todo)
Отправитель
Программа не входящая в состав RabbitMQ, отправляет сообщения.
Отправка сообщения (публикация)
- имя обменника
- ключ маршрутизации
- содержимое сообщения
- опции
- expiration – строка в мс, время через которое сообщение будет удалено из очереди
- priority – приоритет, для приоритетных очередей
- persistent – сохранение сообщения при перезагрузки
- mandatory – если true, то сообщение будет возвращено отправителю в случае когда не нашлось очереди для отправки
- (todo)
Получатель
Программа не входящая в состав RabbitMQ, получает сообщения.
Прием сообщения
- имя очереди
- функция
- опции
- noAck – сообщение подверждается при получении автоматически и будет удалено из очереди независимо от как обработано сообщение получателем
- exclusive – эксклюзивное подключение
- priority – приоритет получателя
Сервер вернет consumerTag, необходимый для отмены приема сообщений в будущем. Null вернется для отмененных сообщений.
Ограничение на прием
Количество не подтвержденных сообщений которых может получить получатель.
Взято с – https://gist.github.com/kyptov/9fdfd3893823997bfeb9e8a797bb3260