Java 如何在DefaultConsumer的我的handleDelivery()中使用channel.Qos、channel.basicAck?

Java 如何在DefaultConsumer的我的handleDelivery()中使用channel.Qos、channel.basicAck?,java,rabbitmq,Java,Rabbitmq,我正在使用新的DefaultConsumer(通道)和覆盖handleDeliverymethod。 我的目标是将我的消费者用作工作队列,为此我知道我必须提供通道。basicQos(1)。使用1作为预取计数。我一直在阅读,我还需要提供channel.basicAck,以便我的服务器知道必须发送多少未确认的消息(如果我在这里出错,请更正我)。基于此计数,channel.basicQos生效。现在,我在handleDelivery方法中使用以下语句 channel.basicQos(1); chan

我正在使用新的DefaultConsumer(通道)和覆盖handleDeliverymethod。 我的目标是将我的消费者用作工作队列,为此我知道我必须提供通道。basicQos(1)。使用1作为预取计数。我一直在阅读,我还需要提供channel.basicAck,以便我的服务器知道必须发送多少未确认的消息(如果我在这里出错,请更正我)。基于此计数,channel.basicQos生效。现在,我在handleDelivery方法中使用以下语句

channel.basicQos(1);
channel.basicAck(envelope.getDeliveryTag(), false);
问题是,我一直遇到以下错误:

com.rabbitmq.client.AlreadyClosedException: clean connection shutdown;
reason: Attempt to use closed channel
at com.rabbitmq.client.impl.AMQChannel.ensureIsOpen(AMQChannel.java:190)
at com.rabbitmq.client.impl.AMQChannel.rpc(AMQChannel.java:223)
.................................
..................................
当我删除channel.basicAck时,我看不出有什么问题。 我如何使用channel.basicQos来工作(我的理解是为了工作,我需要提供basicAck),我不想得到AlreadCyclosedException错误。
感谢您花时间阅读本文,并感谢您提供的任何帮助

我转到rabbitmq日志,看到了这条消息-{amqp_错误,前提条件_失败,“未知传递标记1”,“basic.ack'}。这让我觉得ack和double checked channel.basicConsume有问题,并发现autoAck设置为true。将其更改为false,现在一切正常。您是否检查过您未处于自动确认模式?对。这就是问题所在。在我之前的评论中,我提到autoAck被设置为true。我将其更改为false,现在正在使用我的ACK。对不起,我的错误我跳过了你的第一条评论