在不调用 sync() 或为每个操作添加监听器的情况下处理所有 Netty 异步出站异常的简单通用方法?
A simple and general way to handle all Netty asynchronous outbound exceptions without calling sync() or adding listeners for each operation?
在Netty中我们通常调用Channel
或ChannelHandlerContext
上的方法来对连接进行操作。特别是 write()
、flush()
、writeAndFlush()
等方法用于发送消息。但是,这些方法是异步的,如果连接或传递的参数有错误,它们会引发异常。除非我们调用 sync()
/get()
同步等待结果,或者使用 addListener()
/addListeners()
.
添加侦听器,否则不会处理此类异常
所以我的问题是:是否有一种通用方法可以在不调用额外方法的情况下异步处理所有此类异常,例如,通过在构建 Bootstrap
或初始化 [=10= 期间添加整体异常处理程序]?
我已经阅读并尝试了这个答案,但发现在管道尾部添加ChannelDuplexHandler
只能处理入站异常。
与其自己编写监听器代码,不如使用已经处理异常的现有监听器
只需在每次 write/flush 调用后调用 .addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE)
发送期间抛出的异常现在将被引导至您的 exceptionCaught(Throwable ex)
函数,因此您可以在同一个地方处理写入和读取异常。
在Netty中我们通常调用Channel
或ChannelHandlerContext
上的方法来对连接进行操作。特别是 write()
、flush()
、writeAndFlush()
等方法用于发送消息。但是,这些方法是异步的,如果连接或传递的参数有错误,它们会引发异常。除非我们调用 sync()
/get()
同步等待结果,或者使用 addListener()
/addListeners()
.
所以我的问题是:是否有一种通用方法可以在不调用额外方法的情况下异步处理所有此类异常,例如,通过在构建 Bootstrap
或初始化 [=10= 期间添加整体异常处理程序]?
我已经阅读并尝试了这个答案ChannelDuplexHandler
只能处理入站异常。
与其自己编写监听器代码,不如使用已经处理异常的现有监听器
只需在每次 write/flush 调用后调用 .addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE)
发送期间抛出的异常现在将被引导至您的 exceptionCaught(Throwable ex)
函数,因此您可以在同一个地方处理写入和读取异常。