[AIX HP-UX Linux Solaris Windows]

Exemple de conseiller

Il s'agit d'un exemple de fichier de conseiller appelé ADV_sample.

/ * * 
 * ADV_sample : conseiller HTTP Load Balancer 
 * 
 * 
 * Cette classe définit un exemple de conseiller personnalisé pour Load Balancer. * Comme tous les conseillers, le conseiller personnalisé étend la fonction de
 * la base du conseiller, intitulée ADV_Base. En fait, c'est la base du
 * conseiller qui effectue la plupart des fonctions du conseiller, telles que
 * la communication des charges à Load Balancer afin que ces dernières soient
 * utilisées dans l'algorithme de pondération de Load Balancer. La base 
 * du conseiller effectue également les opérations d'ouverture et de
 * fermeture de socket et fournit des méthodes d'envoi et de 
 * réception au conseiller. Le conseiller lui-même permet uniquement 
 * d'envoyer et de recevoir des données vers et depuis le port du serveur 
 * avisé. Les méthodes TCP de la base de l'assistant sont programmées pour calculer la 
 * la charge. Un indicateur du constructeur de ADV_base remplace, si vous le souhaitez, 
 * la charge existante par la nouvelle charge renvoyée par le conseiller. 
 * 
 * Remarque : selon la valeur définie dans le constructeur, la base du conseiller 
 * fournit la charge à l'algorithme de pondération à une fréquence donnée. Si le véritable conseiller n'a pas terminé ses opérations
 * afin de renvoyer une charge valide, la base du conseiller utilise la charge
 * précédente. 
 * 
 * DESIGNATION 
 * 
 * La convention de dénomination est la suivante : 
 * 
 *  - Le fichier doit se trouver dans le répertoire Load Balancer suivant : 
 * 
 *     ulb/servers/lib/CustomAdvisors/ (ulb\servers\lib\CustomAdvisors sur Windows) 
 * 
 *  - Le nom du conseiller doit être précédé de "ADV_". Le conseiller peut
 *    cependant n'être démarré qu'avec son nom. Par exemple, le conseiller
 * "ADV_sample" peut être démarré en entrant "sample". 
 * 
 *  - Le nom du conseiller doit être en minuscules. 
 * 
 * En tenant compte de ces règles, cet exemple est :
 * 
 *     <base directory="">/lib/CustomAdvisors/ADV_sample.class 
 * 
 *
 * Les conseillers, comme pour le reste de Load Balancer, doivent être compilés avec 
 * la version prérequise Java. Pour que les classes Load
 * Balancer soient accessibles, assurez-vous que le fichier ibmlb.jar (situé
 * dans le sous-répertoire lib du répertoire de base) est inclus dans la
 * variable CLASSPATH du système. 
 * 
 * Méthode fournie par ADV_Base : 
 * 
 * - ADV_Base (constructeur) : 
 * 
 *   - Parms 
 *     - String sName = Nom du conseiller 
 *     - String sVersion = Version du conseiller 
 *     - int iDefaultPort = Numéro de port par défaut pour les conseils 
 *     - int iInterval = Fréquence des conseils sur les serveurs 
 *     - String sDefaultName = Non utilisé. Doit être transmise sous la forme "". 
 *     - boolean replace = True - remplacement de la valeur de la charge 
 *                                par la base du conseiller 
 *	                     False - ajout à la valeur de la charge calculée 
 *                                par la base du conseiller 
 *   - Return 
 *     - Les constructeurs n'ont pas de valeurs de retour. 
 * 
 * La base du conseiller étant basée sur une unité d'exécution, elle dispose de plusieurs autres méthodes 
 * pouvant être utilisées par un conseiller. Ces méthodes peuvent être référencées à l'aide du paramètre
 * CALLER transmis dans la méthode getLoad(). 
 * 
 * Ces méthodes sont les suivantes : 
 *  
 * - send - Envoie un paquet d'informations sur la connexion de socket établie  
 *          sur le serveur sur le port défini. 
 *   - Parms 
 *     - String sDataString - Les données à envoyer se présentent sous forme de chaîne 
 *   - Return
 *     - int RC - Indique si les données ont été correctement envoyées ;
 *                 un zéro indique que les données ont été envoyées ; un 
 *                 entier négatif indique une erreur. 
 * 
 * - receive - Reçoit les informations de la connexion de socket. 
 *   - Parms 
 *     - StringBuffer sbDataBuffer - Données reçues pendant l'appel 
 *   - Return 
 *     - int RC - Indique si les données ont été correctement
 *       reçues ; zéro  indique que les données ont été 
 *                reçues et un entier négatif signale une 
 *                erreur. 
 * 
 * Si la fonction fournie par la base du conseiller n'est pas suffisante, 
 * vous pouvez créer la fonction appropriée dans le conseiller et 
 * les méthodes fournies par la base du conseiller sont alors ignorées. 
 * 
 * Une question essentielle concernant la charge retournée consiste à savoir si elle doit être appliquée 
 * à la charge générée dans la base du conseiller ou 
 * remplacée. Les deux situations peuvent exister. 
 * 
 * Cet exemple porte essentiellement sur le conseiller HTTP Load Balancer. Il
 * fonctionne très simplement : une demande d'envoi (demande http principale)
 * est émise. Dès que la réponse est reçue, la méthode getLoad est arrêtée et la
 * base du conseiller arrête alors de calculer la durée de la demande. La
 * méthode est alors terminée. La 
 * informations renvoyées ne sont pas
 * analysées ; la charge dépend du délai nécessaire 
 * pour exécuter les opérations d'envoi et de réception. 
 */ 

package CustomAdvisors; 
import com.ibm.internet.nd.advisors.*; 
  public class ADV_sample extends ADV_Base implements ADV_MethodInterface 
  { 
    String COPYRIGHT = 
              "(C) Copyright IBM Corporation 1997, All Rights Reserved.\n";
    static final String ADV_NAME = "Sample"; 
    static final int ADV_DEF_ADV_ON_PORT = 80; 
    static final int ADV_DEF_INTERVAL = 7; 

    // Remarque : La plupart des protocoles de serveur
  // requièrent un retour chariot ("\r") et un passage à 
    // la ligne ("\n") à la fin des messages. Si tel est le 
    // cas, incluez-les dans la chaîne ci-dessous. 
    
    static final String  ADV_SEND_REQUEST      = 
       "HEAD / HTTP/1.0\r\nAccept: */*\r\nUser-Agent: " + 
       "IBM_Load_Balancer_HTTP_Advisor\r\n\r\n"; 

    /** 
     * Constructeur. 
     * 
     * Paramètres : aucun, mais le constructeur pour ADV_Base a plusieurs paramètres 
     *        qui doivent lui être transmis. 
     * 
     */ 
     public ADV_sample() 
     { 
       super( ADV_NAME, 
          "2.0.0.0-03.27.98", 
               ADV_DEF_ADV_ON_PORT, 
               ADV_DEF_INTERVAL, 
               "", // not used false); 
       super.setAdvisor( this );
     } 


     /**
      * ADV_AdvisorInitialize  
      *
      * Toute initialisation de conseiller qui doit être exécutée 
      * après le démarrage de la base du conseiller. * Cette méthode n'est appelée qu'une seule fois et n'est généralement
      * pas utilisée. 
      */
      public void ADV_AdvisorInitialize()
      {
        return;
      }

      /**
       * getLoad() 
       * 
       * Cette méthode est appelée par la base du conseiller pour terminer
       * l'opération du conseiller en fonction des informations du protocole. * Dans cet exemple de conseiller, une seule opération d'envoi et de
       * réception est nécessaire ; si une logique plus complexe est nécessaire,
       * il est possible d'émettre des envois et réceptions multiples. Pour  
       * reçue et sa syntaxe peut être analysée. Sur la base  
       * des informations obtenues, un autre ordre d'envoi et de
   * réception peut alors être émis.  
       *  
       * Paramètres :  
       *  
       * - iConnectTime - Charge actuelle qui fait référence à la durée d'exécution de  
       *                  la connexion au serveur via le  
       *                  port défini.  
       *  
       * - caller - Référence à la classe de la base du conseiller où les méthodes  
       *            fournies par le Charge Balancer doivent exécuter des demandes TCP simples,  
       *            à savoir des demandes d'envoi et de réception, principalement.
       * 
       * Résultats : 
       * 
       * - Charge : valeur exprimée en millisecondes, pouvant être ajoutée 
       *   à la charge existante ou remplacée par cette dernière, conformément à la balise 
       *   "replace" du constructeur. 
       * 
       *   Plus la charge est importante, plus le serveur répond lentement.  
       *   Par conséquent, la pondération est d'autant plus basse dans le Load Balancer. 
       *  
       *   Si la valeur est négative, cela implique qu'une erreur s'est produite. Une erreur du
       *   conseiller indique que le serveur auquel le conseiller tente
       *   d'accéder n'est pas accessible et a été identifié comme étant arrêté. * Load Balancer ne tentera pas d'équilibrer un serveur arrêté. Load
       * Balancer recommencera à équilibrer la charge du serveur à la réception
       * d'une valeur positive. 
       * 
       */ 
      public int getLoad(int iConnectTime, ADV_Thread caller) 
      { 
        int iRc; 
        int iLoad = ADV_HOST_INACCESSIBLE; // -1 

        // Send tcp request iRc = caller.send(ADV_SEND_REQUEST);
        if (iRc >= 0) 
        { 
            // exécute une réception 
            StringBuffer sbReceiveData = new StringBuffer(""); 
            iRc = caller.receive(sbReceiveData); 
         
         /**
          * En mode conseiller normal (la balise "replace" a la valeur false), la charge retourne la valeur 
          * 0 ou 1 pour indiquer que le serveur est actif ou arrêté. 
          *  En cas de bonne réception, une charge de zéro est renvoyée pour 
          *  indiquer que la charge élaborée dans la base du conseiller n'est pas utilisée. 
          * 
          * Sinon (la balise "replace" a la valeur true), retourne la valeur de charge désirée. 
          */
 
          if (iRc >= 0) 
          {
             iLoad = 0; 
          } 
        } 
        return iLoad; 
      } 
  } // End - ADV_sample
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_advexample.html