Общие упрощенные понятия. Возможно существуют способы задать другое поведение нежели данное упощенное.
- producer - отправитель, программный код, который отправляет сообщение.
- consumer - получатель, программный код, который должен получить сообшение.
- exchange - обменник, функционал RabbitMQ, получает сообщение с заданными параметрами от отправителя и:
- может сбросить(удалить) сообщение или вернуть отправителю (зависит от атрибутов сообщения),
- может отправить сообщение в очередь,
- может отправить сообщение в несколько очередей (сообщение будет скопировано для каждой очереди)
- queue - очередь, функционал RabbitMQ, хранит все сообщения и раздает их получателям.
- message - сообщение, содержит атрибуты необходимые RabbitMQ, а также данные для передачи от отправителя к получателю
- binding - связывание очереди и обменника. Обменник может отправить сообщения только в те очереди которые с ним связаны.
- routingKey - ключ маршрутизации (может не использоваться), используется обменником для маршрутизации (выбора очереди(ей)) сообщений.
- используется при связывании очереди с обменником
- содержится в атрибуте сообщения при совпадении этих ключей сообщение будет отправлено в очередь
RabbitMQ всегда создает безымянный обменник типа direct. На этот обменник по умолчанию завязаны все очереди, где routingKey равен имени очереди. Отправка сообщения напрямую в очередь на самом деле это отправка сообщения безымянному обменнику с routingKey нужной очереди. Как итог это выглядит и работает как отправка сообщения напрямую в очередь, но сообщения всегда отправляются через обменник.
- direct - прямая отправка в очередь, используется routingKey. Сообщение с каким-то routingKey будет отправленно обменником в очередь связанную с этим обменником с тем же routingKey, иначе сброшено(удалено).
- fanout - routingKey игнорируется, сообщения будут отправлены во все очереди связанные с обменником
- topic - похож на direct, сообщения отправляются с routingKey, но очереди связываются с обменником по шаблонной строке, сообщение попадет в те очереди с шаблонами которых совпадает routingKey
- headers - (todo)
assertExchange(exchange_name, type, [options])
- указать имя обменника
- тип обменника
- перечень аргументов
- durable (bool) - сохранять и восстанавливать после рестарта RabbitMQ
- autoDelete (bool) - удалится после того как все очереди отключатся
- (todo)
bindQueue(queue_name, exhange_name, pattern, [args])
Необходимо указать:
- имя очереди
- имя обменника
- шаблон или routingKey (зависит от типа обменника)
Перед использованием должны быть созданы. Повторное создание с теми же аргументами не создаст ошибки и не создаст еще одну очередь. Повторное создание с другими аргументами создаст ошибку.
assertQueue([queue, [options]])
- имя очереди (опционально), RabbitMQ сгенерирует имя при необходимости
- опции
- exclusive - используется только данным подключением, будет удалено после закрытия подключения
- durable - сохранение после рестарта
- autoDelete - удалится если кол-во получетелей станет ноль
- maxPriority - очередь станет поддерживать приоритетные сообщения с приоритетом от 0 до maxPriority, чем выше число тем приоритетнее
- (todo)
Программа не входящая в состав RabbitMQ, отправляет сообщения.
publish(exchange_name, routingKey, content, [options])
- имя обменника
- ключ маршрутизации
- содержимое сообщения
- опции
- expiration - строка в мс, время через которое сообщение будет удалено из очереди
- priority - приоритет, для приоритетных очередей
- persistent - сохранение сообщения при перезагрузки
- mandatory - если true, то сообщение будет возвращено отправителю в случае когда не нашлось очереди для отправки
- (todo)
Программа не входящая в состав RabbitMQ, получает сообщения.
consume(queue_name, function(msg) {...}, [options])
- имя очереди
- функция
- опции
- noAck - сообщение подверждается при получении автоматически и будет удалено из очереди независимо от как обработано сообщение получателем
- exclusive - эксклюзивное подключение
- priority - приоритет получателя
Сервер вернет consumerTag, необходимый для отмены приема сообщений в будущем. Null вернется для отмененных сообщений.
prefetch(count, [global])
Количество не подтвержденных сообщений которых может получить получатель.
maxPriority - очередь станет поддерживать приоритетные сообщения с приоритетом от 0 до maxPriority, чем выше число тем приоритетнее
- можете пояснить?то есть чем выше числовой параметр priority у сообщения, тем больше вероятность того, что оно будет обработано первым?