为什么ChannelOutboundHandler异常没有被exceptionCaught()方法捕获? (Netty 4.0.4.Final)

时间:2013-07-26 09:23:30

标签: exception-handling netty

(版本:Netty 4.0.4.Final)

如果异常在ChannelInboundHandler中上升,我可以用exceptionCaught()方法处理,但如果异常在ChannelOutboundHandler中上升,我就不能。因为exceptionCaught()不是电话。为什么会这样?

只有这样才能通过分析未来结果来处理出站异常:

channel.writeAndFlush(serverPacket).addListener(new ChannelFutureListener() {
        @Override
        public void operationComplete(ChannelFuture future) throws Exception {
            if (!future.isSuccess()) {
                future.cause().printStackTrace();
            }
        }
});

但这非常不方便。

1 个答案:

答案 0 :(得分:10)

这是设计的...出站操作只通过Future通知,否则我们需要做双重通知,这会产生一些性能损失。如果您想将它传播到exceptionCaught处理程序,您只需将ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE添加为返回的ChannelFuture的Listener。