如何在我的handleDelvery()DefaultConsumer中使用channel.Qos,channel.basicAck?

时间:2015-04-09 14:45:34

标签: java rabbitmq

我正在使用新的DefaultConsumer(频道)并覆盖handleDeliverymethod。 我的目标是将我的消费者用作工作队列,为此我知道我必须提供channel.basicQos(1)。使用1作为我的prefetchCount。我一直在阅读,我还需要提供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)并且我不想得到AlreadyClosedException错误。 感谢您花时间阅读本文以及您可以提供的任何帮助!

0 个答案:

没有答案