Почему мои каналы RabbitMQ закрываются?

Я отлаживаю некоторый Java-код, который использует Apache POI для извлечения данных из документов Microsoft Office. Иногда он сталкивается с большим документом, и POI дает сбой, когда ему не хватает памяти. На этом этапе он пытается опубликовать ошибку в RabbitMQ, чтобы другие компоненты могли узнать, что этот шаг завершился неудачно, и предпринять соответствующие действия. Однако при попытке публикации в очереди возникает исключение com.rabbitmq.client.AlreadyClosedException (чистое отключение соединения; причина: попытка использовать закрытый канал) .

Вот код обработчика ошибок:

try {
    //Extraction and indexing code
}
catch(Throwable t) {
    // Something went wrong! We'll publish the error and then move on with
    // our lives
    System.out.println("Error received when indexing message: ");
    t.printStackTrace();
    System.out.println();
    String error = PrintExc.format(t);
    message.put("error", error);

    if(mime == null) {
        mime = "application/vnd.unknown";
    }

    message.put("mime", mime);
    publish("IndexFailure", "", MessageProperties.PERSISTENT_BASIC, message);
}

Для полноты, вот метод публикации:

private void publish(String exch, String route, 
    AMQP.BasicProperties props, Map<String, Object> message) throws Exception{
    chan.basicPublish(exch, route, props, 
        JSONValue.toJSONString(message).getBytes());  
}

Я не могу найти код в блоке try, который, кажется, закрывает канал RabbitMQ. Существуют ли обстоятельства, при которых канал может быть закрыт неявно?

РЕДАКТИРОВАТЬ : Я должен отметить, что исключение AlreadyClosedException генерируется вызовом basicPublish внутри publish.

28
задан quanticle 12 January 2012 в 17:11
поделиться