RabbitMQ предлагает возможность дополнительно установить счетчик предварительной выборки.
Используя spring-amqp SimpleMessageListenerContainer
, я заметил, что счетчик предварительной выборки всегда установлен. Я не могу установить счетчик предварительной выборки на 0, потому что SimpleMessageListenerContainer
устанавливает его как минимум на txSize
, который должен быть больше нуля (даже если транзакций нет). Итак, есть ли способ отключить счетчик предварительной выборки, то есть сделать его неограниченным?
Вот соответствующий код из spring-amqp:
SimpleMessageListenerContainer.createBlockingQueueConsumer()
делает это:
int actualPrefetchCount = prefetchCount > txSize ? prefetchCount : txSize;
и BlockingQueueConsumer.start()
делает это:
if (!acknowledgeMode.isAutoAck()) {
// Set basicQos before calling basicConsume (otherwise if we are not acking the broker
// will send blocks of 100 messages)
try {
channel.basicQos(prefetchCount);
}
Какова причина всегда вызывать basicQos() в Springs BlockingQueueConsumer
? Нет ли какого-либо варианта использования для отключения подсчета предварительной выборки? (кроме автоподтверждения, очевидно).
Документация rabbitmq обсуждает накладные расходы, связанные с установкой счетчика предварительной выборки с канальной (глобальной) областью действия. Явно не упоминается, имеет ли установка его с областью действия потребителя какие-либо накладные расходы по сравнению с тем, чтобы не устанавливать его вообще. Если не ошибаюсь, весна всегда ставит его с потребительским размахом. У него действительно нет накладных расходов? Тем не менее кажется странным отсутствие возможности не устанавливать его.
Спасибо