【发布时间】:2015-05-12 17:55:28
【问题描述】:
我有一个 ChannelInitializer,其中 initChannel 可以引发异常。我如何捕捉到这个异常?我尝试添加 exceptionCaught,但得到了相同的结果,大致如下:
10:24:02.547 [nioEventLoopGroup-1-0] 警告 io.netty.channel.ChannelInitializer - 无法初始化通道。结束:[id: 0x4639a9bd, /127.0.0.1:36004 => /127.0.0.1:6060] java.lang.Exception:我的异常 [堆栈跟踪]
为了记录,我使用的是 5.0.0.Alpha2
【问题讨论】:
-
你能分享你的
initChannel方法的代码吗?你知道异常来自哪里吗?我认为你唯一的机会就是让这个异常脱离频道初始化。 -
@Moh-Aw 从概念上讲,只需从 initChannel 抛出一个通用异常。当然,可以将 initChannel 的内容包装在 try/catch 形式中。但是,netty 的行为很糟糕,因为它没有通过 netty 框架传播异常。由于 ChannelInitializer 扩展了实现 ChannelHandler 的 ChannelHandlerAdapter,因此人们期望通过 exceptionCaught 来处理异常。
-
据我理解,netty在调用initChannel时处于一种特殊情况,即建立管道。如果此操作抛出,则可以认为通道管道设置不正确,在这种情况下,最好关闭通道。最好将管道设置为“故障安全”模式,即不可能抛出异常,并可能添加一个初始处理程序来执行可以抛出的逻辑(如果这在您的工作流程中是可能的)。跨度>
标签: netty