RabbitMQ как дросселировать потребителя

Я использую RabbitMQ успешно. Однако у меня проблема: если я попаду в ситуацию, когда в очереди много сообщений, то потребитель (служба Windows) пытается получить их все, а затем просто держится за них, но никогда не выполняет действия или не признает их.

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

Есть ли способ настроить максимальное количество сообщений, которые потребитель будет пытаться и брать на себя ответственность в любой момент?

Я вижу, что поле RequestedChannelMax на RabbitMQ.Client.ConnectionFactory заключается в том, что правильная настройка для ограничения этого?

Спасибо

Ответ 1

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

Вам нужно установить значения предварительной выборки, изменив качество обслуживания (QoS) канала, чтобы ограничить количество сообщений, которые он попытается получить за один раз. Проверьте basic.qos здесь. Он имеет 3 параметра, размер (в октетах), подсчет (количество целых сообщений, которые он забирает за один раз) и глобальный флаг.

Это сообщение в блоге является интересным, если вы заинтересованы в оптимизации пропускной способности и разговорах о предварительной выборке примерно на 2/3 пути вниз по странице.

Надеюсь, что это поможет!