CAMEL - 使用onException未捕获通道已关闭的异常

时间:2017-11-02 16:17:21

标签: apache-camel

我正在打开这个问题,因为我在网上找不到任何问题的答案。

我使用驼峰来实现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());

程序没有停止但是我希望在客户端断开连接时捕获它。 请注意,我可以捕获在我的路径中抛出的其他异常。

1 个答案:

答案 0 :(得分:2)

您无法将其作为异常处理,因为异常已经在netty中被捕获并被记录。此异常不会从netty传播到netty组件。

解决方案有点棘手。您可以扩展SimpleChannelInboundHandler并覆盖方法channelInactive,如How can I detect network disconnection in Apache Camel?中所述。 在此自定义处理程序中,您可以在交换时使用与应用程序相关的其他信息设置自定义属性。