Tôi đang gỡ lỗi một số mã Java sử dụng Apache POI để lấy dữ liệu ra khỏi tài liệu Microsoft Office. Thỉnh thoảng, nó gặp phải một tài liệu lớn và POI bị treo khi hết bộ nhớ. Tại thời điểm đó, nó cố gắng để xuất bản các lỗi để RabbitMQ, để các thành phần khác có thể biết rằng bước này không thành công và có những hành động thích hợp. Tuy nhiên, khi nó cố gắng xuất bản lên hàng đợi, nó nhận được com.rabbitmq.client.AlreadyClosedException (clean connection shutdown; reason: Attempt to use closed channel)
.Tại sao kênh RabbitMQ của tôi tiếp tục đóng?
Dưới đây là đoạn mã xử lý lỗi:
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);
}
Để hoàn chỉnh, đây là phương pháp xuất bản:
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());
}
tôi không thể tìm thấy bất kỳ mã bên trong khối try xuất hiện để đóng kênh RabbitMQ . Có bất kỳ hoàn cảnh nào trong đó kênh có thể bị đóng hoàn toàn không?
CHỈNH SỬA: Tôi nên lưu ý rằng sự cố đã nhận được được nhấn bởi cuộc gọi basicPublish
bên trong xuất bản.
cách bạn giải quyết vấn đề này? –