RabbitMQ: Ограничение длины очереди

Максимальная длина очереди может быть ограничена заданным количеством сообщений, или заданным количеством байт (суммарная длина всех тел сообщений, без учета свойств сообщений и любых накладных расходов), или и тем, и другим.

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

Настройки длины очереди также могут быть навязаны политиками оператора.

Во всех случаях используется количество сообщений в состоянии готовности; сообщения, не принятые потребителями, не учитываются.

Количество готовых сообщений и их объем в байтах можно увидеть с помощью параметров messages_ready и message_bytes_ready из вывода rabbitmqctl list_queues, а также аналогичных полей в пользовательском интерфейсе управления и ответах HTTP API.

Поведение по умолчанию для ограничения максимальной длины очереди

Поведение RabbitMQ по умолчанию, когда задана максимальная длина или размер очереди и максимальное значение достигнуто, заключается в том, что сообщения из передней части очереди (т.е. самые старые сообщения в очереди) отбрасываются или заносятся в "мертвую очередь". Чтобы изменить это поведение, используйте настройку переполнения, описанную ниже.

Поведение при переполнении очереди

Используйте параметр переполнения для настройки поведения переполнения очереди. Если для параметра overflow установлено значение reject-publish или reject-publish-dlx, последние опубликованные сообщения будут отброшены. Кроме того, если включено подтверждение издателя, издатель будет проинформирован об отклонении с помощью сообщения basic.nack. Если сообщение направлено в несколько очередей и отклонено хотя бы одной из них, канал сообщит об этом издателю через basic.nack. Сообщение все равно будет опубликовано во всех остальных очередях, которые могут его зарегистрировать. Разница между reject-publish и reject-publish-dlx заключается в том, что reject-publish-dlx также отправляет отклоненные сообщения в "мертвую очередь".

Определение максимальной длины очереди с помощью политики

Чтобы задать максимальную длину с помощью политики, добавьте ключ max-length и/или max-length-bytes в определение политики. Например:

rabbitmqctl

rabbitmqctl в Windows

Политика my-pol гарантирует, что очередь one-meg содержит не более 1MiB данных сообщений. Когда лимит в 1MiB достигнут, самые старые сообщения отбрасываются из головы очереди.

Чтобы определить поведение при переполнении - отбрасывать сообщения из головы или отклонять новые публикации, добавьте ключ overflow к определению политики. Например:

rabbitmqctl в Windows

Политика my-pol гарантирует, что очередь two-messages содержит не более 2 сообщений, и все дополнительные публикации отправляются с ответами basic.nack до тех пор, пока очередь содержит 2 сообщения и подтверждение публикации включено.

Политики также могут быть определены с помощью плагина управления.

Определение максимальной длины очереди с помощью x-аргументов при декларировании

Максимальное количество сообщений можно задать, указав в аргументе объявления очереди x-max-length целое неотрицательное значение.

Максимальную длину в байтах можно задать, задав аргумент объявления очереди x-max-length-bytes целым неотрицательным значением.

Если заданы оба аргумента, то будут применяться оба; какой бы предел не был достигнут первым, он будет применен.

Поведение при переполнении можно задать, указав в аргументе объявления очереди x-overflow строковое значение. Возможные значения: drop-head (по умолчанию), reject-publish или reject-publish-dlx.

В данном примере на Java объявляется очередь с максимальной длиной 10 сообщений:

Проверка пределов длины очереди

Чтобы проверить эффективные ограничения для очереди, проверьте ее дополнительные аргументы и эффективную политику.

Это можно сделать с помощью инструментов CLI или пользовательского интерфейса управления.

Использование инструментов CLI

rabbitmqctl list_queues можно использовать для отображения необязательных аргументов очереди и политики, применяемой к очереди, если таковая имеется:

Понравилась статья? Поделиться с друзьями:
Добавить комментарий