码上敲享录 > rabbitmq常见问题详解 > rabbitmq消费者瞬间就获全部取队列的消息问题

rabbitmq消费者瞬间就获全部取队列的消息问题

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

rabbitmq消费者瞬间就获全部取队列的消息问题


解决方法:

那是因为消费者可能设置了自动确认,所以消费者获取第一个消息并没处理完业务代码就马上直接获取下一个消息,所以我们可以设置消费者手动确认,也就是把自动确认autoAck设置为false并添加手动确认。

比如下面的 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 -> {});


0

有建议,请留言!

  • *您的姓名:

  • *所在城市:

  • *您的联系电话:

    *您的QQ:

  • 咨询问题:

  • 提 交