1
我遇到了一個問題,其中設置basic.qos
到1
沒有達到預期的效果 - 大量郵件仍然推送給我的客戶。RabbitMQ Prefetch Ignored
我的代碼看起來有點像這樣:
Channel channel = getChannel("pollQueuePassive"); // from our own channel pool implementation
try{
channel.queueDeclarePassive(queue.name);
} catch (IOException e){
channel = getChannel("pollQueueActive");
channel.queueDeclare(queue.name, true, false, false, null);
}
channel.basicQos(1);
QueueingConsumer consumer = new QueueingConsumer(channel);
channel.basicConsume(queue.name, autoAck, consumer);
while (!stopPolling()) {
try{
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
String message = new String(delivery.getBody());
boolean workResult = doWork(message);
if(!autoAck) {
if(workResult)
channel.basicAck(delivery.getEnvelope().getDeliveryTag(), true);
else
channel.basicNack(delivery.getEnvelope().getDeliveryTag(), false, true);
}
} catch (InterruptedException e) {}
}
closeConnection();
當我開始從隊列中隊列中的消費以這種方式,所有消息(向上20000,在某些情況下)幾乎是即時交付給消費者。由於我希望將隊列中的消息同時分發給數十個消費者,因此這種行爲顯然是不可取的。我一直在推動我的basic.qos
宣言 - 包括在從我們的頻道池返回頻道之前 - 無濟於事。任何想法爲什麼預取大小不會被尊重?
謝謝!
啊,我忘了檢查'autoAck'的值進一步堆棧。謝謝。 –