Netty ChannelFutureListener Выполнить обновление БД при операцииComplete - PullRequest
0 голосов
/ 14 июня 2019

Я хочу обновить состояние записи в базе данных, когда ChannelFutureListener возвращает успех, и я хочу выполнить это обновление в потоке EventExectuor, а не в потоке ввода-вывода.Может ли кто-нибудь любезно проверить правильность приведенного ниже подхода?

Я использую компонент Netty4 в Apache Camel, а последний обработчик в конвейере выполняет бизнес-логику.

 ch.pipeline().addLast("encoder", new StringEncoder());
    ch.pipeline().addLast("decoder", new ....Decoder()));
    ch.pipeline().addLast("idlehandler", new IdleStateHandler(..));
    ch.pipeline().addLast(new DefaultEventExecutorGroup(100),"handler", new ServerChannelHandler());

private class ServerResponseListener implements ChannelFutureListener {
        private String connectionId;

        public LineHandlerServerResponseListener(String connectionId) {
            this.connectionId = connectionId;
        }

        @Override
        public void operationComplete(ChannelFuture future) throws Exception {
            if (!future.isSuccess()) {
                LOGGER.warn(
                        "Cannot write response " + response + " to " + future.channel().remoteAddress() + " due to ",
                        future.cause());
            } else {
                LOGGER.info("Successfully sent response {} to the remote host {}", response,
                        future.channel().remoteAddress());
                future.channel().pipeline().lastContext().executor().execute(new Runnable() {

                    @Override
                    public void run() {
                        updateMessageStatus(connectionId);

                    }
                });
            }
        }

    }

Я отправляюдаже правильному исполнителю?

...