Назначить выполнение цепи обработчиков 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 в последующих обработчиках?


Ответы (0 шт):