关于如何在Netty中进行错误处理的最佳实践,很少(好)资源,我的团队已经看到很多错误被静默吞噬的实例,这使得调试不太好。
我只是想知道一个好的默认策略是简单地传递你在赢得write()
时传递给ctx.write(msg,promise)
的承诺?
我编写了a bunch of "learning/exploratory"测试以更好地了解Netty的异常处理,并且我发现处理程序管道尾部的异常处理程序比异常源只有每个处理程序传递它时才会调用其promise侦听器。直到那时,我们通常只会做ctx.write(msg)
,丢失被送进的ChannelPromise
。当然,如果你想做别的事情并传递另一个承诺(ctx.newPromise()
)你这样做,但我想知道是否传递了默认承诺是有道理的。
如果是这样,为什么Netty默认不执行此操作?我认为当调用者调用ctx.write(msg)
重载时,这是有道理的,因为大多数人不希望静默删除异常。
是的,如果你实现promise
,你应该传递ChannelOutboundHandler
,实际上这正是ChannelOutboundHandlerAdapter
提供的默认实现。如果你没有传递promise
,你有责任完全填充它,这可以直接完成,也可以用你创建的另一个ChannelPromise
链接它,并在某个时候通过write
传递(或者通过返回的ChannelFuture传递) ctx.write(Object)