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);
答案 0 :(得分:2)
我想这是因为您正在使用OrderedMemoryAwareThreadPoolExecutor
,在这种情况下,事件将按照它们发生的顺序执行。因此messageReceived()
将始终在channelClose()
之前执行。
因此,如果您收到3封邮件,之后该频道已关闭,则前三次messageReceived
将被执行,之后只会执行channelClose()
。
如果使用MemoryAwareThreadPoolExecutor
,则channelClose
可以在messageReceived()
之前调用{{1}},因为此处不会对事件的执行进行排序。
希望这会有所帮助!!