¿Cuál es la mejor manera de reconectarse después de la conexión cerrada en Netty?
Escenario simple:
Una clase A de nivel inferior que se extiende a SimpleChannelUpstreamHandler. Esta clase es el caballo de batalla para enviar el mensaje y recibió la respuesta.Una clase B de nivel superior que puede ser utilizada por otra parte del sistema para enviar y recibir mensajes (puede simular tanto sincrónicos como asíncronos). Esta clase crea el ClientBootstrap, establece la fábrica de tuberías, invoca el bootstrap.connect () y, finalmente, obtiene un identificador / referencia de la clase A a través del cual se utiliza para enviar y recibir mensajes. Algo como:
ChannelFuture future = bootstrap.connect();
Channel channel = future.awaitUninterruptibly().getChannel();
A handler = channel.getPipeline (). Get (A.class);
Sé que en la clase A, puedo anular public void channelClosed (ChannelHandlerContext ctx, ChannelStateEvent e); de modo que cuando el servidor remoto está inactivo, puedo ser notificado.
Dado que después de que se cierra el canal, la referencia de clase A original (controlador anterior) de la clase B ya no es válida, así que necesito reemplazarlo por una nueva referencia.
Idealmente, quiero que la clase A tenga un mecanismo para notificar a la clase B dentro del método channelClosed anulado anteriormente para que se pueda invocar nuevamente a bootstrap.connect dentro de la clase B. Una forma de hacer esto es tener una referencia en la clase A que haga referencia a la clase B . Para hacer eso, necesitaría pasar la referencia de clase B a PipelineFactory y luego hacer que PipelineFactory pase la referencia de B a A.
¿Alguna otra forma más sencilla de lograr lo mismo?
Gracias,