获取com.rabbitmq.client.AlreadyClosedException:clean connection shutdown;

时间:2017-10-25 13:22:09

标签: rabbitmq channel

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)

1 个答案:

答案 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();
    }