Exception 默认情况下,出站处理程序是否应该传递ChannelPromise?

Exception 默认情况下,出站处理程序是否应该传递ChannelPromise?,exception,exception-handling,netty,Exception,Exception Handling,Netty,关于如何在Netty中进行错误处理的最佳实践,很少有(好的)资源,我的团队已经看到了相当多的错误被默默吞没的实例,这使得调试不太好 我只是想知道一个好的默认策略是否是在执行您的winctx.write(msg,promise)时将承诺传递到write() 我编写测试是为了更好地了解Netty的异常处理,并且我发现,与异常源相比,更靠近处理程序管道尾部的异常处理程序只有在每个处理程序都传递它的情况下才会调用它的promise侦听器。在此之前,我们通常只执行ctx.write(msg),丢失发送的C

关于如何在Netty中进行错误处理的最佳实践,很少有(好的)资源,我的团队已经看到了相当多的错误被默默吞没的实例,这使得调试不太好

我只是想知道一个好的默认策略是否是在执行您的win
ctx.write(msg,promise)
时将承诺传递到
write()

我编写测试是为了更好地了解Netty的异常处理,并且我发现,与异常源相比,更靠近处理程序管道尾部的异常处理程序只有在每个处理程序都传递它的情况下才会调用它的promise侦听器。在此之前,我们通常只执行
ctx.write(msg)
,丢失发送的
ChannelPromise
。当然,如果您希望做其他事情并传递另一个承诺(
ctx.newPromise()
),您可以这样做,但我想知道传递每个默认的承诺是否有意义


如果是这样,为什么Netty不按默认值这样做?我认为,当调用方只调用
ctx.write(msg)
重载时,这是有意义的,因为大多数人不希望异常被悄悄删除。

是的,如果您实现
ChannelOutboundHandler
,您应该传递
承诺,事实上,这正是
ChannelOutboundHandlerAdapter
提供的默认实现。如果您没有传递
承诺
您有责任完全填充它,这可以直接完成,也可以通过将它链接到另一个
渠道承诺
来完成,该渠道承诺是您创建的,并在某个点通过
写入
传递(或通过
ctx.write(对象)返回的渠道未来)

好的,如果我正确理解您的意思,您应该始终按照承诺或频道的未来做一些事情,因为不这样做很有可能不会处理可能出现的错误。我建议在下一版本的《Netty in Practice》(或其他文档)中更全面地介绍这一点和一般异常处理策略,因为在当前版本中分配的3-4页(约94页)中没有涉及这一点。它主要涉及什么(API),而不是如何、为什么、何时问题:)