Похоже, что если очереди нет, сообщение отбрасывается и нет способа его получить.
Да, это правильно, но это только частьstory.
Сообщение queue - это место хранения сообщений, опубликованных на сервере. потребитель - это назначенный набор соединений для приема сообщений, помещенных в очередь. exchange - это просто место для отправки сообщений. Он содержит семантику маршрутизации, чтобы определить, какие сообщения попадают в очереди на сервере. Когда сообщение не может быть перенаправлено в очередь и / или получателя, существует различные семантики, которые могут применяться , но по умолчанию сообщение отбрасывается.
Варианты обращенияс невозможными сообщениями:
- Альтернативный обмен - обозначает другой обмен, где сообщения могут быть сброшены, если они не могут быть направлены в очередь натекущий обмен. Это можно сравнить с тем, как работает TCP / IP, когда хост назначения недоступен в текущей подсети и трафик направляется на шлюз. Обратите внимание, что очередь должна быть привязана к альтернативному обмену для сообщения, которое должно быть сброшено. Типичным случаем может быть его настройка в качестве разветвленного обмена с одной очередью для перехвата всех сообщений, отправляемых в альтернативный обмен.
- Обязательно или Немедленно - вернуть сообщение отправителю, если оно не может быть доставлено. Сервер не хранит сообщение.
- Обязательно обозначает, что сообщение должно быть доставленным в очередь на момент публикации. Если сообщение не маршрутизируется, издатель получит
basic.return
. - Немедленно , указывающее, что, помимо доставки, должен быть немедленно направлен напотребитель в определенной очереди (например, он недостаточно хорош для того, чтобы его позже выбросили в очередь для получения - его нужно доставить конечному потребителю прямо сейчас .
В любом случае, если очереди нет, сервер не может сохранить сообщение.