Ответ 1
Поля immediate
и mandatory
являются частью спецификации AMQP и также рассматриваются в FAQ RabbitMQ, чтобы выяснить, как его разработчики интерпретировали их значение:
Этот флаг сообщает серверу, как реагировать, если сообщение не может быть очередь. В частности, если установить и после выполнения привязок сообщение было помещено в нулевые очереди, тогда сообщение возвращается отправителю (с basic.return). Если обязательный не были установлены под тем же обстоятельства, которые сервер тихонько отбросьте сообщение.
Или, по-моему, "Поместите это сообщение хотя бы на одну очередь. Если вы не можете, отправьте его мне".
Для сообщения, опубликованного с немедленным set, если соответствующая очередь готова потребителей, то один из них будет иметь сообщение направлено на него. Если повезет сбой потребителей перед получение сообщения будет отправлено и/или доставляются другим потребителям по этой очереди (если нет messaged is ack'ed, и все это сделано как обычно). Если, однако, совпадающая очередь имеет нулевую готовность потребителям сообщение не будет выставляется для последующей пересылки на из этой очереди. Только если все совпадающие очереди не готовы потребителям, что сообщение возвращается отправителю (через basic.return).
Или, на мой взгляд, "если есть хотя бы один потребитель, подключенный к моей очереди, который может принять доставку сообщения в этот момент, немедленно доставьте это сообщение им. Если нет подключенных потребителей, тогда нет смысла мое сообщение потребляется позже, и они никогда этого не заметят. Они откладывают, они проигрывают".