Phi*_*vid 1 java messaging amqp rabbitmq
我遇到了一个问题,设置basic.qos为1没有达到预期的效果 - 大量消息仍然被推送给我的消费者。
我的代码看起来有点像这样:
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();
Run Code Online (Sandbox Code Playgroud)
一旦我开始以这种方式从队列中消费,队列中的所有消息(在某些情况下最多 20,000 条)几乎会立即传递给消费者。由于我想同时将队列中的消息分发给数十个消费者,这种行为显然是不可取的。我玩过移动我的basic.qos声明 - 包括在从我们的通道池返回通道之前 - 但没有效果。有什么想法为什么预取大小不被遵守吗?
谢谢!
| 归档时间: |
|
| 查看次数: |
2484 次 |
| 最近记录: |