My Netty频道处理程序channelClosed ()被阻止,而另一条消息正在接收messageReceived().
我用于OrderedMemoryAwareThreadPoolExecutor同步消息.
是channelClosed()由低优先级线程处理?
你能告诉netty中的线程优先级吗?谢谢
objChannelPipeline.addLast("ipFilter", objCustomIPFilterHandler);
objChannelPipeline.addLast("idleHandler", new IdleStateHandler(timer,5,5, 0));
objChannelPipeline.addLast("loggingHandler", objLoggingHandler);
objChannelPipeline.addLast("frameDecoder",
new DelimiterBasedFrameDecoder(Integer.MAX_VALUE, false, ChannelBuffers.copiedBuffer("\n\n".getBytes(CharsetUtil.UTF_8))));
objChannelPipeline.addLast("messageDecoder", new CustomMessageDecoder());
objChannelPipeline.addLast("groupOrder", executionHandler);
objChannelPipeline.addLast("ProtocolMultiplexer", CustomHandler);
Run Code Online (Sandbox Code Playgroud)
我想这是因为您正在使用OrderedMemoryAwareThreadPoolExecutor,在这种情况下事件将按照它们发生的顺序执行。因此messageReceived()将始终在 之前执行channelClose()。
因此,如果您收到了 3 条消息,之后通道关闭,那么前 3 次messageReceived将被执行,之后只会channelClose()被执行。
如果您MemoryAwareThreadPoolExecutor在这种情况下使用,channelClose则可以在之前调用,messageReceived()因为这里事件的执行没有顺序。
希望这可以帮助 !!
| 归档时间: |
|
| 查看次数: |
591 次 |
| 最近记录: |