您必须声明basicQos设置,才能一次从ACK到NACK状态获取一条消息,并禁用自动ACK以便显式给出确认。
ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); channel.basicQos(1); channel.queueDeclare(QUEUE_NAME, true, false, false, null); System.out.println("[*] waiting for messages. To exit press CTRL+C"); QueueingConsumer consumer = new QueueingConsumer(channel); channel.basicConsume(QUEUE_NAME, consumer); while(true) { QueueingConsumer.Delivery delivery = consumer.nextDelivery(); int n = channel.queueDeclarePassive(QUEUE_NAME).getMessageCount(); System.out.println(n); if(delivery != null) { byte[] bs = delivery.getBody(); System.out.println(new String(bs)); //String message= new String(delivery.getBody()); channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false); //System.out.println("[x] Received '"+message); } }
希望能帮助到你!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)