Netty 通道关闭后如何清理包含资源的用户事件

Netty 通道关闭后如何清理包含资源的用户事件,netty,Netty,我让一些线程将用户事件消息对象(其中包含一个ByteBuf)发送到通道,然后这些消息将在UserEventTrigger()处理程序方法中处理,该处理程序执行一些逻辑并最终写入通道,以便netty自动释放事件消息对象中包含的ByteBuf。但我发现,如果通道关闭,userEventTriggered()将不再被调用,因此ByteBuf会在内部用户事件消息队列中泄漏 目前,我使用ConcurrentLinkedQueue来存储挂起的用户事件消息对象。如果我想将消息发送到通道,我将消息放入队列,并通

我让一些线程将用户事件消息对象(其中包含一个ByteBuf)发送到通道,然后这些消息将在UserEventTrigger()处理程序方法中处理,该处理程序执行一些逻辑并最终写入通道,以便netty自动释放事件消息对象中包含的ByteBuf。但我发现,如果通道关闭,userEventTriggered()将不再被调用,因此ByteBuf会在内部用户事件消息队列中泄漏

目前,我使用ConcurrentLinkedQueue来存储挂起的用户事件消息对象。如果我想将消息发送到通道,我将消息放入队列,并通过其他消息对象通知通道。如果通道处于活动状态,它将从队列中获取消息,否则消息将保留在队列中,最后,在某个进程中,保留在队列中的消息将被清除


这个解决方案似乎可行,但可能有更简单、更优雅的解决方案。任何帮助都将不胜感激

据我所知,这是正确的处理方法。您可能还需要考虑不要将消息放置在封闭通道的队列中,因为NETY本身将在管道结束时释放用户事件。

但是,在一些罕见的情况下,通道可能在通道之后关闭。ISACTIVE()返回真。