[AIX HP-UX Linux Solaris Windows]

Exemple : Implémentation d'un conseiller de flux latéral

L'exemple ci-après illustre l'implémentation d'un conseiller de flux latéral. Cet exemple montre la suppression du socket standard ouvert par la base du conseiller. A la place, ce conseiller ouvre un socket Java de flux latéral pour interroger un serveur. Cette procédure peut être utile pour les serveurs qui utilisent un port différent par rapport au trafic client normal pour écouter un requête du conseiller.

Dans cet exemple, un serveur écoute le port 11999 et lorsqu'il est interrogé, il retourne une valeur de charge avec l'entier hexadécimal "4". Cet exemple est exécuté en mode remplacement (le dernier paramètre du constructeur du conseiller a la valeur true) et le code de base du conseiller utilise la valeur de charge renvoyée à la place du délai écoulé.

Notez l'appel à supressBaseOpeningSocket() dans la routine d'initialisation. La suppression du socket de base lorsque aucune donnée n'est envoyée n'est pas nécessaire. Par exemple, vous pouvez ouvrir le socket pour que le conseiller puisse contacter le serveur. Examinez avec soin les besoins de votre application avant d'opter pour cette solution.

package CustomAdvisors; 
import java.io.*; 
import java.net.*; 
import java.util.*; 
import java.util.Date; 
import com.ibm.internet.lb.advisors.*; 
import com.ibm.internet.lb.common.*; 
import com.ibm.internet.lb.server.SRV_ConfigServer; 

public class ADV_sidea extends ADV_Base implements ADV_MethodInterface { 
  static final String ADV_NAME = "sidea"; 
  static final int ADV_DEF_ADV_ON_PORT = 12345; 
  static final int ADV_DEF_INTERVAL = 7; 

  // crée une matrice d'octets avec le message de demande de charge 
  static final byte[] abHealth = {(byte)0x00, (byte)0x00, (byte)0x00,
                                  (byte)0x04}; 

  public ADV_sidea() { 
    super(ADV_NAME, "3.0.0.0-03.31.00", ADV_DEF_ADV_ON_PORT, 
          ADV_DEF_INTERVAL, "", 
          true);         // le paramètre du mode de remplacement a la valeur true 
    super.setAdvisor( this ); 
  } 

//-------- 
// ADV_AdvisorInitialize 
  public void ADV_AdvisorInitialize() 
  { 
    suppressBaseOpeningSocket();        // demande au code de base d'ouvrir le socket 
                                        // standard 
    return; 
  } 

//-------- 
// getLoad 
  public int getLoad(int iConnectTime, ADV_Thread caller) { 
    int iRc; 
    int iLoad = ADV_HOST_INACCESSIBLE;    // -1 
    int iControlPort = 11999;             // port de communication
                                          // avec le serveur 
    String sServer = caller.getCurrentServerId(); // adresse du serveur à interroger 
    try { 
      socket soServer = new Socket(sServer, iControlPort);   // ouvre le socket sur 
                                                             // le serveur 
      DataInputStream disServer = new DataInputStream( 
                                                      soServer.getInputStream()); 
      DataOutputStream dosServer = new DataOutputStream( 
                                                      soServer.getOutputStream()); 
      int iRecvTimeout = 10000;           // définit le délai (en millisecondes) 
                                          // de réception des données 
      soServer.setSoTimeout(iRecvTimeout); 
      dosServer.writeInt(4);              // envoie un message au serveur 
      dosServer.flush(); 
      iLoad = disServer.readByte();       // reçoit une réponse du serveur 

    } catch (exception e) { 
      system.out.println("Caught exception " + e); 
    } 
    return iLoad;    // retourne la charge indiquée par le serveur 
  } 
}



Référence associée
Exemple de conseiller
Rubrique de référence Rubrique de référence    

Conditions d'utilisation | Commentaires

Dernière mise à jourDernière mise à jour : Jun 21, 2011 12:02:44 PM EDT
Nom du fichier : rprf_advexss.html