WebSphere Load Balancer for IPv4 and IPv6
             Betriebssysteme: AIX, HP-UX, Linux, Solaris, Windows

             Inhaltsverzeichnis und Suchergebnisse personalisieren

Beispiel: Beispiel-Advisor-Funktion

Nachfolgend sehen Sie die Advisor-Beispieldatei "ADV_sample".

/ * *
 * ADV_sample: HTTP-Avisor für Load Balancer
 *
 *
 * Diese Klasse definiert eine angepasste Beispiel-Advisor-Funktion für Load Balancer. 
 * Diese angepasste Advisor-Funktion erweitert wie alle anderen Advisor-Funktionen den Advisor-Basiscode
 * ADV_Base. Es ist der Advisor-Basiscode, der die meisten Funktionen ausführt.
 * Dazu gehört das Zurückmelden von Belastungen an Load Balancer, die für den
 * Wertigkeitsalgorithmus von Load Balancer verwendet werden. Darüber hinaus
 * stellt der Advisor-Basiscode Socket-Verbindungen her, schließt Sockets und
 * stellt Sende- und Empfangsmethoden für die Advisor-Funktion bereit. Die
 * Advisor-Funktion selbst wird nur zum Senden von Daten an den Port bzw.
 * Empfangen von Daten vom Port des empfohlenen Servers verwendet. Die
 * TCP-Methoden innerhalb des Advisor-Basiscodes sind zeitlich gesteuert,
 * um die Last zu berechnen. Mit einem Flag der Methode "constructor" in
 * "ADV_base" kann bei Bedarf die vorhandene Last mit der neuen, von der
 * Advisor-Funktion zurückgegebenen Last überschrieben werden.
 *
 * Anmerkung: Der Advisor-Basiscode stellt in angegebenen Intervallen
 * die Last ausgehend von einem in der Methode "constructor" gesetzten Wert
 * für den Wertigkeitsalgorithmus bereit. Wenn die eigentliche Advisor-Funktion
 * noch keine gültige Last zurückgeben kann, verwendet der Advisor-Basiscode
 * die vorherige Last.
 *
 * NAMEN
 *
 * Die Namenskonvention ist wie folgt:
 *
 *  - Die Datei muss sich im folgenden Load-Balancer-Verzeichnis befinden:
 *
 *     ulb/servers/lib/CustomAdvisors/ (ulb\servers\lib\CustomAdvisors unter Windows)
 *
 *  - Der Advisor-Name muss das Präfix "ADV_" haben. Zum Starten
 *   der Advisor-Funktion genügt jedoch der Name. Die Advisor-Funktion
 *   ADV_sample kann beispielsweise mit sample gestartet werden.
 *
 * - Der Name der Advisor-Funktion muss in Kleinbuchstaben angegeben werden.
 *
 * Basierend auf diesen Regeln wird deshalb wie folgt auf das Beispiel verwiesen:
 *
 *     <base directory="">/lib/CustomAdvisors/ADV_sample.class
 *
 *
 * Advisor müssen wie der Rest von Load Balancer mit der vorausgesetzten Version
 * von Java kompiliert werden. Um den Zugriff auf die Load-Balancer-Klassen zu
 * gewährleisten, müssen Sie sicherstellen, dass die Datei "ibmlb.jar" (aus dem
 * Unterverzeichnis "lib" des Basisverzeichnisses) im CLASSPATH des Systems enthalten ist.
*
 * Von ADV_Base bereitgestellte Methoden:
 *
 * - ADV_Base (Konstruktor):
 *
 *   - Parmeter
 *     - String sName = Name des Advisors
 *     - String sVersion = Version des Advisors
 *     - int iDefaultPort = Standardport, über den Empfehlungen ausgegeben werden
 *     - int iInterval = Intervall, in dem Empfehlungen zu den Servern ausgegeben werden sollen
 *     - String sDefaultName = Nicht verwendet. Muss als leere Zeichenfolge ("") übergeben werden.
 *     - boolean replace = True - Den vom Advisor-Basiscode berechneten Lastwert
 *                                ersetzen
 *                         False - Zu dem vom Advisor-Basiscode berechneten Lastwert
 *                                 addieren
 *   - Return
 *     - Konstruktoren haben keine Rückgabewerte.
 *
 * Da der Advisor-Basiscode auf Threads basiert, stehen verschiedene andere
 * Methoden für Advisor-Funktionen zur Verfügung. Auf diese kann mit dem von
 * getLoad() übergebenen Parameter CALLER verwiesen werden.
 *
 * Diese Methoden sind wie folgt:
 *
 * - send - Informationspaket über die eingerichtete Socket-Verbindung
 *          an den Server am angegebenen Port senden.
* - Parameter
 *   - String sDataString - Die zu sendenden Daten in Form einer Zeichenfolge
 * - Rückgabewert
 *   - int RC - Gibt an, ob die Daten erfolgreich gesendet wurden oder nicht:
                Null gibt an, dass die Daten gesendet wurde. Ein negativer
 *              Wert zeigt einen Fehler an.
 *
 * - receive - Empfang von Informationen von der Socket-Verbindung.
 *   - Parameter
 *     - StringBuffer sbDataBuffer - Die während des Aufrufs von receive empfangenen Daten
 *   - Rückgabewert
 *     - int RC - Gibt an, ob die Daten erfolgreich empfangen wurden oder nicht:
                  Null gibt an, dass Daten empfangen wurden. Eine negative ganze
 *                Zahl zeigt einen Fehler an.
 *
 * Falls die vom Advisor-Basiscode bereitgestellte Funktionalität nicht
 * ausreicht, können Sie die gewünschte Funktion innerhalb des Advisors
 * erstellen. Die vom Advisor-Basiscode bereitgestellten Methoden werden
 * dann ignoriert.
 *
 * Eine wichtige Frage hinsichtlich der zurückgegebenen Last ist, ob
 * sie auf die vom Advisor-Basiscode generierte Last angewendet oder
 * diese ersetzen soll. Es gibt gültige Instanzen für beide Situationen.
 *
 * Dieses sehr einfache Beispiel entspricht im Wesentlichen der
 * HTTP-Advisor-Funktion von Load Balancer.
 * Es wird eine Sendeanforderung (HTTP HEAD) abgesetzt. Beim Empfang einer
 * Antwort wird die Methode "getLoad" beendet und der Advisor-Basiscode
 * angewiesen, die Ablaufsteuerung der Anforderung zu stoppen. Die Methode
 * ist damit abgeschlossen. Die zurückgegebenen Informationen werden keiner
 * Syntaxanalyse unterzogen. Die Last basiert auf der für das Senden und
 * Empfangen benötigten Zeit.
*/ 

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; 

  // Anmerkung: Die meisten Serverprotokolle erfordern am Ende von Nachrichten
  // eine Zeilenschaltung ("\r") und einen Zeilenvorschub ("\n"). Sollte dies
  // für Sie zutreffen, nehmen Sie sie an dieser Stelle in Ihre Zeichenfolge
  // auf.

    
    static final String ADV_SEND_REQUEST = 
       "HEAD / HTTP/1.0\r\nAccept:  */ *\r\nUser-Agent: " + 
       "IBM_Load_Balancer_HTTP_Advisor\r\n\r\n"; 

    /**
     * Konstruktor. 
   *
   * Parameter: Keine. An die Methode "constructor für "ADV_Base" müssen
   * jedoch mehrere Parameter übergeben werden.

     * 
     */ 
     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 );
     } 


     /**
      * Eine Advisor-spezifische Initialisierung, die nach dem Start der
      * Advisor-Funktion stattfinden muss. Diese Methode wird nur einmal aufgerufen
      * und in der Regel nicht verwendet.

      */
      public void ADV_AdvisorInitialize()
      {
        return;
      }

      /**
       * getLoad()
       *
       * Diese Methode wird vom Advisor-Basiscode aufgerufen, um die Operation der
       * Advisor-Funktion auf der Grundlage protokollspezifischer Details zu beenden.
       * In diesem Beispiel sind nur eine Sende- und eine Empfangsoperation
       * notwendig. Wenn eine komplexere Logik erforderlich ist, können mehrere
       * Sende- und Empfangsoperationen ausgeführt werden.
       * Es könnte beispielsweise eine Antwort empfangen werden. Die sich aus der
       * Syntaxanalyse dieser Antwort ergebenden Informationen könnten eine
       * weitere Sende- und Empfangsoperation nach sich ziehen.

       *
       * Parameter:
       *
       * - iConnectTime - Derzeitige Last entsprechend der Zeit, die für das Herstellen
       *                  der Verbindung zum Server über den angegebenen Port benötigt
       *                  wurde.

       *
       * - caller - Verweis auf die Advisor-Basisklasse, wo die von Load
       *            Balancer bereitgestellten Methoden einfache TCP-Anforderungen
       *            wie Sende- und Empfangsaufrufe durchführen sollen.
       *
       * Ergebnisse:
       *
       * - Last: Ein in Millisekunden angegebener Wert, der entsprechend dem
       *   Flag "replace" der Methode "constructor" zur vorhandenen Last
       *   addiert wird oder die vorhandene Last ersetzt.

       *
       *   Je größer die Last ist, desto länger benötigte der Server für die
       *   Antwort. Um so geringer wird auch die Wertigkeit im
       *   ausfallen.

       *
       *   Wenn der Wert negativ ist, wird von einem Fehler ausgegangen. Ein Fehler
       *   von einer Advisor-Funktion zeigt an, dass der Server, den die
       *   Advisor-Funktion zu erreichen versucht, nicht zugänglich und inaktiv ist.
       *   Load Balancer versucht nicht, einen inaktiven Server am Lastausgleich zu
       *   beteiligen. Der Server wird erst wieder in den Lastausgleich einbezogen,
       *   wenn ein positiver Wert empfangen wird.

       * 
       */ 
      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)
        {
            // receive (Empfang) ausführen
            StringBuffer sbReceiveData = new StringBuffer("");
            iRc = caller.receive(sbReceiveData);

         /**
          * Im normalen Advisor-Modus (Flag "replace" ist auf "false" gesetzt),
          * wird der Lastwert 0 oder 1 zurückgegeben, um anzugeben, ob der Server
          * aktiv oder inaktiv ist.
    		    *  Bei erfolgreichem Empfang wird als Lastwert null zurückgegeben, um
          *  anzuzeigen, dass der von der Basis-Advisor-Funktion ermittelte
          *  Lastwert verwendet werden soll.

          *
          *  Andernfalls (Flag "replace" ist auf "true" gesetzt) müssen Sie
          *  den gewünschten Lastwert zurückgeben.

          */

          if (iRc >= 0)
          {
             iLoad = 0;
          }
        }
        return iLoad;
      }
  } // Ende - ADV_sample
Referenz    

Nutzungsbedingungen | Feedback

Letzte Aktualisierung: 31. Juli 2008 3:18:06 PM EDT
http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=/com.ibm.websphere.edge.doc/lb/info/ae/rprf_advexample.html