Quelle est la meilleure façon de se reconnecter après une fermeture de la connexion dans Netty

Scénario Simple:

  1. Un niveau inférieur de classe qui étend SimpleChannelUpstreamHandler. Cette classe est le cheval de bataille pour envoyer le message et a reçu la réponse.
  2. Un haut niveau de classe B, qui peuvent être utilisés par d'autres partie du système pour envoyer et recevoir des message (peut simuler à la fois Synchrone et Asynchrone). Cette classe crée la ClientBootstrap, définir le pipeline de l'usine, invoquer le bootstrap.connect() et, éventuellement, obtenir une poignée de référence de la classe A à qui sera utilisé pour envoyer et recevoir des messages. Quelque chose comme:

    ChannelFuture future = bootstrap.connect();
    Channel channel = future.awaitUninterruptibly().getChannel();

    Un gestionnaire = canal.getPipeline().get(A.class);

Je sais que dans la classe A, je peux le remplacer
public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e);
de sorte que lorsque le serveur distant est en panne, je peux en être informé.

Depuis après que le canal est fermé, l'original de la catégorie de référence (handler ci-dessus) dans la classe B n'est plus valable, donc j'ai besoin de la remplacer avec une nouvelle référence.

Idéalement, je veux de la classe à avoir un mécanisme pour informer la classe B dans la surdéfini channelClosed méthode du bootstrap.connect peut être invoqué à nouveau au sein de la classe B. Une façon de le faire est d'avoir une référence dans la classe Une référence de classe B. Pour ce faire, j'ai besoin de passer de la classe B de référence pour la PipelineFactory et ensuite le PipelineFactory passer la référence de B à A.

Tout autre moyen plus simple de réaliser la même chose?

merci,

InformationsquelleAutor step-by-step | 2013-11-02