(版本: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();
}
}
});
但这非常不方便。
答案 0 :(得分:10)
这是设计的...出站操作只通过Future通知,否则我们需要做双重通知,这会产生一些性能损失。如果您想将它传播到exceptionCaught处理程序,您只需将ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE添加为返回的ChannelFuture的Listener。