码上敲享录 > rabbitmq常见问题详解 > rabbitmq设置channel.basicQos无效

rabbitmq设置channel.basicQos无效

上一章章节目录下一章 2019-12-13已有3208人阅读 评论(0)

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 -> {});


向大家推荐《Activiti工作流实战教程》:https://xiaozhuanlan.com/activiti
0

有建议,请留言!

  • *您的姓名:

  • *所在城市:

  • *您的联系电话:

    *您的QQ:

  • 咨询问题:

  • 提 交