2013-07-26 167 views
7

(版本:Netty的4.0.4.Final)为什么ChannelOutboundHandler异常未被exceptionCaught()方法捕获? (Netty的4.0.4.Final)

如果异常上升ChannelInboundHandler,我能应付在exceptionCaught()方法,但如果异常上升ChannelOutboundHandler,我不能。因为,exceptionCaught()不是通话。这是为什么?

只有通过analize未来的结果来处理出站例外像这样:

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

但它是非常不方便的。

回答

10

它是由设计...出站操作只通过未来通知,否则我们需要做双重通知,有一些性能损失。如果您希望将其传播到exceptionCaught处理程序,则可以将ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE作为侦听器添加到返回的ChannelFuture。