[AIX HP-UX Linux Solaris Windows]

Beispiel: Beispieladvisor

Nachfolgend sehen Sie die Advisorbeispieldatei "ADV_sample".

/ * * 
 * ADV_sample: HTTP-Avisor für Load Balancer
 * 
 * 
 * Diese Klasse definiert einen angepassten Beispieladvisor für Load Balancer. Dieser
 * angepasste Advisor erweitert wie alle anderen Advisor den Advisorbasiscode
 * ADV_Base. Es ist der Advisorbasiscode, 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 Advisorbasiscode Socket-Verbindungen her, schließt Sockets und
 * stellt Sende- und Empfangsmethoden für den Advisor bereit. Der Advisor
 * 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 Advisorbasiscodes 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, vom Advisor zurückgegebenen Last
 * überschrieben werden.
 * 
  * Anmerkung: Der Advisorbasiscode stellt in angegebenen Intervallen
 * die Last ausgehend von einem in der Methode constructor festgelegten
 * Wert für den Wertigkeitsalgorithmus bereit. Ist der eigentliche
 * Advisor noch abgeschlossen, so dass sie keinen gültigen
 * Lastwert zurückgegeben kann, verwendet der Advisorbasiscode die
 * bisherige Last.
 * 
  * NAMEN
 * 
  * Es gilt die folgende Namenskonvention:
 * 
 *  - Die Datei muss sich im folgenden Load-Balancer-Verzeichnis befinden:
 * 
 *     ulb/servers/lib/CustomAdvisors/ (ulb\servers\lib\CustomAdvisors unter Windows)
 * 
  * - Der Name des Advisors muss das Präfix ADV_ haben. Zum Starten
 *   des Advisors genügt jedoch der Name. Der Advisor
 *   ADV_sample kann beispielsweise mit sample gestartet werden.
 * 
  * - Der Name des Advisors muss in Kleinbuchstaben angegeben werden.
 * 
  *  Unter Beachtung dieser Regeln wird auf dieses Beispiel wie folgt verwiesen:
 * 
 *     <Basisverzeichnis="">/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 (Constructor):
 * 
  *   - Parameter
  *     - String sName = Name des Advisors
  *     - String sVersion = Version des Advisors
  *     - int iDefaultPort = Standardportnummer für den Advisor
  *     - int iInterval = Intervall für die Ausführung des Advisors
 *                       auf den Servern
 *     - String sDefaultName = Unused. Muss als leere Zeichenfolge ("") übergeben werden.
   *     - boolean replace = True - Den vom Advisorbasiscode berechneten Lastwert
 *                                ersetzen
  *	                        False - Zu dem vom Advisorbasiscode berechneten Lastwert
 *                                 addieren
  *   - Rückgabe
  *     - constructor-Methoden haben keine Rückgabewerte.
 * 
  * Da der Advisorbasiscode auf Threads basiert, stehen verschiedene andere
 * Methoden für Advisor zur Verfügung. Auf diese kann mit dem von
 * getLoad() übergebenen Parameter CALLER verwiesen werden.
 * 
  * Es handelt sich um die folgenden Methoden:
 *  
  * - send - Informationspaket über die eingerichtete Socket-Verbindung
 *          an den Server am angegebenen Port senden.
  *   - Parameter
  *     - String sDataString - Daten werden in Form einer Zeichenfolge
 *                            gesendet
  *   - Rückgabe
  *     - int RC - Null gibt unabhängig vom erfolgreichen/gescheiterten Senden
 *                der Daten an, dass die Daten gesendet wurden. Eine negative
 *                ganze Zahl 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ückgabe
  *     - int RC - Gibt an, ob die Daten erfolgreich empfangen wurden.
  *                Null gibt an, dass die Daten empangen wurden. Eine negative
 *                ganze Zahl zeigt einen Fehler an.
 * 
  * Falls die vom Advisorbasiscode bereitgestellte Funktionalität nicht
 * ausreicht, können Sie die gewünschte Funktion innerhalb des Advisors
 * erstellen. Die vom Advisorbasiscode bereitgestellten Methoden werden
 * dann ignoriert.
 * 
  * Eine wichtige Frage hinsichtlich der zurückgegebenen Last ist, ob
 * sie auf die vom Advisorbasiscode generierte Last angewendet oder
 * diese ersetzen soll. Es gibt gültige Instanzen für beide Situationen.
 * 
 * Dieses Beispiel entspricht im Wesentlichen dem HTTP-Advisor von Load Balancer.
 * Es wird eine Sendeanforderung (http head) abgesetzt. Beim Empfang einer
 * Antwort wird die Methode getLoad beendet und der Advisorbasiscode wird dazu
 * 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. Alle Rechte vorbehalten.
      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";

    /** 
        * Constructor.
     * 
        * Parameter: Keine. An die constructor-Methode 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 );
     } 


     /**
         * ADV_AdvisorInitialize
      *
         * Eine advisorspezifische Initialisierung, die nach dem Start des
   * Advisors stattfinden muss. Diese Methode wird nur einmal aufgerufen
   * und in der Regel nicht verwendet.
      */
        public void ADV_AdvisorInitialize()
      {
            return;
      }

      /**
          * getLoad()
       * 
          * Diese Methode wird vom Advisorbasiscode aufgerufen, um die Operation des
   * Advisors 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 Advisorbasisklasse, 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 je nach Einstellung
   *   des Flas replace der constructor-Methode 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 Load Balancer
       *   ausfallen.
       *  
       *   Wenn der Wert negativ ist, wird von einem Fehler ausgegangen. Ein Fehler von
       *   einem Advisor weist darauf hin, dass der Server, den der Advisor zu erreichen
       *   versucht, nicht zugänglich und inaktiv ist. Load Balancer versucht nicht,
       *   einen inaktiven Server am Lastausgleich zu beteiligen. Der Server wird erst
       *   dann 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

        // tcp-Anforderung senden iRc = caller.send(ADV_SEND_REQUEST);
        if (iRc >= 0) 
        { 
            		// Empfang ausführen
            		StringBuffer sbReceiveData = new StringBuffer("");
            		iRc = caller.receive(sbReceiveData);
         
         /**
                *  Im normalen Advisormodus (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 vom Basisadvisor 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 von ADV_sample
Referenzartikel Referenzartikel    

Nutzungsbedingungen | Feedback

last-updated-altLetzte Aktualisierung: Jul 5, 2011 11:00:34 AM EDT
Dateiname: rprf_advexample.html