2017-10-25 10 views
0

com.rabbitmq.client.AlreadyClosedException:クリーン接続シャットダウン。 理由:クローズドチャネルを使用しようとしcom.rabbitmq.client.AlreadyClosedExceptionを取得中:接続切断をクリーンアップします。

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

私は、この問題を解決実は私は長い時間のために開いている私のチャンネルを保っていました。だから、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(); 
    } 
関連する問題