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

标签 exception-handling netty

(版本:Netty 4.0.4.Final)

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

只有通过分析 Future 结果来处理出站异常的方法如下:

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

但这非常不方便。

最佳答案

这是设计使然...出站操作仅通过 Future 通知,否则我们将需要进行双重通知,这会导致一些性能损失。如果您想将其传播到 exceptionCaught 处理程序,您只需将 ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE 作为监听器添加到返回的 ChannelFuture。

关于exception-handling - 为什么 ChannelOutboundHandler 异常没有被 exceptionCaught() 方法捕获? (Netty 4.0.4.Final),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17877611/

相关文章:

c# - 参数超出范围异常

java - 如果您在数据库中保存 Java 异常信息,您应该保存异常的哪些部分以帮助在没有冗余的情况下找出问题?

asp.net-mvc - 在MVC中显示捕获异常

java - 我如何通过读取 block block 写入文件数据并写入netty中的 channel ?

java - 当我尝试创建客户端时 Redisson 内存泄漏

rest - 在Spring REST应用程序中使用自定义消息处理通用HTTP异常

PHP DRY 抛出 InvalidArgumentException

java - 简单的Java api来形成和发送ntp数据包

java - 有什么问题吗?服务器响应消息的不同结果

java - Netty 有哪些 Servlet 容器