com.rabbitmq.client.AlreadyClosedException:clean connection shutdown; 原因:尝试使用封闭频道
at com.rabbitmq.client.impl.AMQ
Channel.ensureIsOpen(AMQChannel.java:190)
at com.rabbitmq.client.impl.AMQChannel.transmit(AMQChannel.java:291)
at com.rabbitmq.client.impl.ChannelN.basicPublish(ChannelN.java:562)
at com.rabbitmq.client.impl.ChannelN.basicPublish(ChannelN.java:545)
at citylink.SearchNotification.completeTask1(SearchNotification.java:135)
at citylink.SearchNotification.run(SearchNotification.java:80)
at java.util.TimerThread.mainLoop(Unknown Source)
at java.util.TimerThread.run(Unknown Source)
答案 0 :(得分:0)
我解决了这个问题,实际上我长时间保持我的频道开放。所以RabbitMQ正在关闭它不再使用的频道。所以在使用它之后我也关闭了频道和连接。这是代码:
try {
//Create the Connection
Connection connection = connectionFactory.newConnection();
//Create the Channel
Channel channel = connection.createChannel();
QueueingConsumer consumer = new QueueingConsumer(channel);
channel.basicConsume(QueueName, consumer);
boolean removeAllUpTo = true;
while(true){
Delivery delivery = consumer.nextDelivery(5000);
if(delivery == null) break;
if(processMessage(delivery)){
long deliveryTag=delivery.getEnvelope().getDeliveryTag();
channel.basicAck(deliveryTag, removeAllUpTo);
}
}
channel.close();
connection.close(
} catch (IOException e) {
e.printStackTrace();
} catch (ShutdownSignalException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ConsumerCancelledException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}