Я пытаюсь реализовать модель распределенного актера, которая использует Netty в качестве протокола связи - версию NIO с TCP-соединениями.Netty - writeAndFlush и порядок сообщений
Допустим, у нас есть 2 узла (машины), каждый из которых имеет экземпляры сервера Netty, которые передают входящие сообщения субъектам на этом узле. Я хотел бы сохранить порядок сообщений для одной и той же пары удаленных участников, поэтому моим решением было использовать асинхронный метод writeAndFlush для отправки сообщений удаленному узлу и актеру - когда другому сообщению нужно отправить другому участнику до того, как был доставлен первый , Я бы добавил его в буфер и с обратным вызовом сообщения writeAndFlush, обработал следующий из буфера. Это выглядит следующим образом:
channel.writeAndFlush(message).addListener(new MessageListener(mailboxOfSelector));
метод обратного вызова:
@Override
public void operationComplete(ChannelFuture future) throws Exception {
Queue<RemoteMessage> unsentToMailbox = unsentMessages.get(mailboxOfSelector);
if (!unsentToMailbox.isEmpty()) {
RemoteMessage message = unsentToMailbox.poll();
channel.writeAndFlush(message).addListener(this);
}
}
Так что если А и В 2 экземплярах сервера, связанные с каналом, и мы вышли из A -> B - мой вопрос будет: что означает флаг isSuccess в глубине? и когда действительно возвращается обратный вызов?
Он возвращается, когда он заканчивается последним обработчиком на A или фактически, когда он доставляется первому обработчику на B?