Подтвердить что ты не робот

Использование RabbitMQ немедленных и обязательных бит

Я использовал сервер RabbitMQ и для публикации сообщений, когда поле немедленное было установлено true, я попытался отправить 50 000 сообщений и с помощью rabbitmqctl list_queues, Я видел, что количество сообщений в очереди было ноль. Затем я изменил флаг немедленный на false и снова попытался отправить 50 000 сообщений, а затем с помощью rabbitmqctl list_queues я увидел, что в очередях было всего 100 000 сообщений. (До настоящего времени ни один потребитель не присутствовал)

И после этого я начал использовать потребитель, и он потреблял все 100 000 сообщений. Кто-нибудь, пожалуйста, помогите мне понять поле бит немедленного и это поведение тоже. Кроме того, я не мог понять концепцию поля бит обязательное.

Поблагодарив в Advance.

Гурприт Сингх.

4b9b3361

Ответ 1

Поля immediate и mandatory являются частью спецификации AMQP и также рассматриваются в FAQ RabbitMQ, чтобы выяснить, как его разработчики интерпретировали их значение:

Mandatory

Этот флаг сообщает серверу, как реагировать, если сообщение не может быть очередь. В частности, если установить и после выполнения привязок сообщение было помещено в нулевые очереди, тогда сообщение возвращается отправителю (с basic.return). Если обязательный не были установлены под тем же обстоятельства, которые сервер тихонько отбросьте сообщение.

Или, по-моему, "Поместите это сообщение хотя бы на одну очередь. Если вы не можете, отправьте его мне".

Immediate

Для сообщения, опубликованного с немедленным set, если соответствующая очередь готова потребителей, то один из них будет иметь сообщение направлено на него. Если повезет сбой потребителей перед получение сообщения будет отправлено и/или доставляются другим потребителям по этой очереди (если нет messaged is ack'ed, и все это сделано как обычно). Если, однако, совпадающая очередь имеет нулевую готовность потребителям сообщение не будет выставляется для последующей пересылки на из этой очереди. Только если все совпадающие очереди не готовы потребителям, что сообщение возвращается отправителю (через basic.return).

Или, на мой взгляд, "если есть хотя бы один потребитель, подключенный к моей очереди, который может принять доставку сообщения в этот момент, немедленно доставьте это сообщение им. Если нет подключенных потребителей, тогда нет смысла мое сообщение потребляется позже, и они никогда этого не заметят. Они откладывают, они проигрывают".