Назначить выполнение цепи обработчиков Netty один поток из EventExecutor
Есть TCP сервер на Netty. В нем создается базовые bossGroup и workerGroup
private NioEventLoopGroup workerGroup = new NioEventLoopGroup(ioThreadPoolSize, new DefaultThreadFactory("ChannelThread"));
private NioEventLoopGroup bossGroup = new NioEventLoopGroup(1);
Однако, задачи, которые должны выполняться на сервере выполнены на блокирующем API, поэтому их нельзя выполнять напрямую на потоков workerGroup. Для их выполнения был создан taskExecutor:
private EventExecutorGroup taskExecutor = new UnorderedThreadPoolEventExecutor(taskThreadPoolSize, new DefaultThreadFactory("TaskExecutorsPool"));
Частично, проблема решается, если каждому обработчику в цепи назначить taskExecutor:
ch.pipeline()
.addLast(paymentExecutor,"ChannelStatusObserver", new ChannelStatusObserverHandler(tcpConnectionPool))
.addLast(paymentExecutor,"SllHandler", new MySSLHandler(sslEngine))
.addLast(paymentExecutor,"Partitioner", new DelimiterBasedFrameDecoder(65536, true, delimiterBytes))
.addLast(paymentExecutor,"Encoder", new WriterHandler(StandardCharsets.UTF_8))
.addLast(paymentExecutor,"Decoder", new ConvertToMessageHandler(StandardCharsets.UTF_8))
.addLast(paymentExecutor,"V0_3", new ProtocolListenerV0_3_1(StandardCharsets.UTF_8))
.addLast(paymentExecutor,new ExceptionHandler());
}
В данном случае выполнение каждого обработчика запускается в новом потоке taskExecutor и из-за этого отслеживание хода обработки запроса в логах становится затруднительным. Возможно ли настроить pipeline так, чтобы начиная с определенного обработчика поток из taskExecutor начинал выполнять pipeline в своем потоке и до того момента, пока не будет указан другой executor в последующих обработчиках?