gpt4 book ai didi

java - 为什么我的 RabbitMQ channel 一直关闭?

转载 作者:IT老高 更新时间:2023-10-28 21:17:49 25 4
gpt4 key购买 nike

我正在调试一些使用 Apache POI 从 Microsoft Office 文档中提取数据的 Java 代码。偶尔会遇到大文档,内存不足时 POI 崩溃。此时,它会尝试将错误发布到 RabbitMQ,以便其他组件可以知道此步骤失败并采取适当的措施。但是,当它尝试发布到队列时,会收到 com.rabbitmq.client.AlreadyClosedException (clean connection shutdown;reason: Attempt to use closed channel)

这是错误处理程序代码:

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 block 中找不到任何似乎关闭 RabbitMQ channel 的代码。是否存在可以隐式关闭 channel 的情况?

编辑:我应该注意,AlreadyClosedException 是由发布中的 basicPublish 调用引发的。

最佳答案

AMQP channel 因 channel 错误而关闭。可能导致 channel 错误的两种常见情况:

  • 尝试将消息发布到不存在的交换器
  • 尝试发布一条设置了立即标志但没有包含 Activity 消费者集的队列的消息

我会考虑在您尝试使用 addShutdownListener() 发布消息的 channel 上设置一个 ShutdownListener捕获关闭事件并查看导致它的原因。

关于java - 为什么我的 RabbitMQ channel 一直关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8839094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com