Я хочу обновить состояние записи в базе данных, когда 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);
}
});
}
}
}
Я отправляюдаже правильному исполнителю?