我正在打开这个问题,因为我在网上找不到任何问题的答案。
我使用驼峰来实现TCP / IP服务器,我已经定义了这样的路由:
from("netty4:tcp://0.0.0.0:3510")
.to("file:target/outbox");
我有一个客户端将数据发送到此服务器。当我断开此客户端时,我可以在日志中看到此异常:
[Camel (camel-client) thread #0 - NettyEventExecutorGroup] WARN o.a.c.component.netty4.NettyConsumer - Closing channel as an exception was thrown from Netty. Caused by: [java.io.IOException - an existing connection was forcibly closed by the remote host]
我的问题是我无法使用onException子句捕获此异常。
onException(IOException.class)
.log("Exception: ${body}")
.handled(true)
.process(new ExceptionProcessor());
程序没有停止但是我希望在客户端断开连接时捕获它。 请注意,我可以捕获在我的路径中抛出的其他异常。
答案 0 :(得分:2)
您无法将其作为异常处理,因为异常已经在netty中被捕获并被记录。此异常不会从netty传播到netty组件。
解决方案有点棘手。您可以扩展SimpleChannelInboundHandler并覆盖方法channelInactive
,如How can I detect network disconnection in Apache Camel?中所述。
在此自定义处理程序中,您可以在交换时使用与应用程序相关的其他信息设置自定义属性。