rabbitmq设置channel.basicQos无效
解决方法:
在消费者端配置channel.basicQos(1,false)后,还是瞬间把队列里的消息一下子就全部获取完了,但我客户端代码处理业务没那么快,导致消费者端的服务器资源被耗尽。
原来消费者端要把自动确认autoAck设置为false,basicQos才有效果。
比如下面的 channel.basicConsume第二个参数设置为false就是设置autoAck为false,要 执行channel.basicAck后消费者才会去获取下一个未确认消息。
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
}
String message = new String(delivery.getBody(), "UTF-8");
System.out.println("消费者:"+consumerTag+" 接收的消息:" + message );
};
channel.basicQos(1,false);//限制消费者获取未确认消息的数量
channel.basicConsume(QUEUE_NAME, false, deliverCallback, consumerTag -> {});