WebSphere Load Balancer per IPv4 e IPv6
             Sistemi operativi: AIX, HP-UX, Linux, Solaris, Windows

             Personalizzazione dell'indice e dei risultati della ricerca

Esempio: advisor di esempio

Questo è un file dell'advisor di esempio denominato ADV_sample.

/ * *
 * ADV_sample: l'advisor HTTP di Load Balancer
 *
 *
 * Questa classe definisce un advisor personalizzato di esempio per Load Balancer. Come tutti
 * gli advisor, questo advisor personalizzato estende la funzione dell'advisor di base,
 * detto ADV_Base. Questo è l'advisor che esegue la maggior parte
 * delle funzioni dell'advisor, come ad esempio la notifica dei carichi al Load Balancer
 * da utilizzare nell'algoritmo di valutazione. Inoltre, l'advisor di base effettua le operazioni  * di connessione e chiusura del socket e
 * fornisce i metodi di invio e di ricezione che saranno utilizzati dall'advisor. L'advisor
 * in sé viene utilizzato unicamente per l'invio e la
 * ricezione dei dati sulla porta specifica del server esaminato. * I metodi TCP interni all'advisor di base sono programmati per
 * calcolare il carico. * Se si desidera, un'indicatore all'interno del costruttore dell'advisor di base sostituisce
 * il carico esistente con il nuovo carico restituito dall'advisor. 
 *
 * Nota: in base al valore impostato nel costruttore, l'advisor di base fornisce il carico
 * all'algoritmo di valutazione a intervalli specificati. Se l'advisor effettivo non ha  * completato l'elaborazione e non può restituire un carico valido, l'advisor di base utilizza il
 * carico inviato precedentemente. 
 *
 * DENOMINAZIONE
 *
 * La convenzione di denominazione è:
 *
 *  - Il file deve trovarsi nella seguente directory di Load Balancer:
 *
 *     ulb/servers/lib/CustomAdvisors/ (ulb\servers\lib\CustomAdvisors su Windows)
 *
 *  - Il nome dell'advisor deve essere preceduto da "ADV_". L'advisor può essere
 *    avviato anche solo con il nome; ad esempio l'advisor "ADV_sample"
 *    può essere avviato con "sample". 
 *
 *  - Il nome dell'advisor deve essere in minuscolo. 
 *
 * Seguendo queste regole, l'esempio sarà:
 *
 *     <directory base="">/lib/CustomAdvisors/ADV_sample.class
 *
 *
 * Gli advisor, come il resto del Load Balancer, devono essere compilati con
 * la versione prerequisita di Java. Per garantire l'accesso alle classi di Load Balancer,
 * verificare che il file ibmlb.jar (ubicato nella sottodirectory lib della
 * directory base) sia incluso nella variabile CLASSPATH del sistema. 
 *
 * Metodi forniti da ADV_Base:
 *
 * - ADV_Base (Constructor):
 *
 *   - Parametri
 *     - String sName = Il nome dell'advisor
 *     - String sVersion = La versione dell'advisor
 *     - int iDefaultPort = Il numero di porta predefinito su cui eseguire l'analisi
 *     - int iInterval = Intervallo in cui eseguire l'analisi sui server
 *     - String sDefaultName = Non utilizzato. Deve essere inoltrato come "". 
 *     - boolean replace = True - sostituisce il valore di carico calcolato
 *                                con l'advisor di base
 *                         False - viene aggiunto al valore di carico calcolato
 *                                 con l'advisor di base
 *   - Ritorno
 *     - I constructor non hanno valori di ritorno. 
 * Poiché l'advisor di base è basato sul thread, sono disponibili
  * diversi altri metodi da utilizzare. * Tali metodi possono essere utilizzati mediante
 * il parametro CALLER inviato in getLoad(). 
 *
 * Questi metodi sono:
 *
 * - send - invia un pacchetto di informazioni sulla connessione socket stabilita
 *          al server sulla porta specificata. 
 * - Parametri
 *   - String sDataString - I dati da inviare sotto forma di stringa
 * - Ritorno
 *   - int RC - Indica se i dati sono stati correttamente inviati o meno: zero indica
 *              che i dati sono stati inviati, un numero negativo indica un errore. 
 *
 * - receive - Riceve informazioni dalla connessione socket. 
 *   - Parametri
 *     - StringBuffer sbDataBuffer - I dati vengono ricevuti durante la chiamata a receive
 *   - Ritorno
 *     - int RC - Indica se i dati sono stati correttamente inviati o meno: zero indica
 *                che i dati sono stati inviati, un numero negativo indica un errore. 
 *
 * Se la funzione fornita dall'advisor di base non è sufficiente,
 *  è possibile creare la funzione appropriata all'interno dell'advisor e
 * i metodi forniti dall'advisor verranno quindi ignorati. 
 *
 * Un punto importante relativo al carico restituito è se applicarlo al carico
 * generato all'interno dell'advisor di base o se sostituirlo;
 * esistono istanze valide di entrambe le situazioni. 
 *
 * Questo esempio corrisponde essenzialmente all'advisor HTTP di Load Balancer. * Esso è molto semplice: viene emessa una richiesta di invio, una richiesta head http. * Una volta ricevuta la risposta, il metodo getLoad termina, indicando all'advisor
 * di base di arrestare la tempificazione della richiesta. * Il metodo è quindi completo. Le informazioni restituite non vengono analizzate;
 * il carico si basa sul tempo richiesto per eseguire le operazioni di invio e ricezione. 
 */ 

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; 

    // Nota: la maggior parte dei protocolli server richiede un ritorno a capo ("\r") e un
    // avanzamento riga ("\n") alla fine dei messaggi. In questo caso, includerli
    // nella propria stringa qui. 
    
    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. 
     *
     * Parametri: None; ma il constructor per ADV_Base ha diversi parametri
     *        che devono essere inoltrati. 
     * 
     */ 
     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
      *
      * Qualsiasi inizializzazione specifica che deve essere eseguita
      * una volta avviato l'advisor di base. Questo metodo viene richiamato solo una volta
      * e di solito non è utilizzato. 
      */
      public void ADV_AdvisorInitialize()
      {
        return;
      }

      /**
       * getLoad()
       *
       * Questo metodo viene chiamato dall'advisor di base per completare l'operazione dell'advisor
       * in base ai dettagli specifici del protocollo. In questo advisor
       * di esempio, è necessario soltanto un invio e una ricezione; se è necessaria una        * logica più complessa, è possibile emettere più invii e ricezioni. Ad
       * esempio, una risposta può essere ricevuta ed analizzata. In base alle informazioni,
       * è possibile emettere un altro invio e ricezione.  
       *
       * Parametri:
       *
       * - iConnectTime - Il carico corrente in quanto fa riferimento al tempo necessario
       *                  per completare la connessione al server mediante
       *                  la porta specificata.  
       *
       * - caller - Un riferimento alla classe dell'advisor di base in cui i metodi forniti
       *            da Load Balancer devono eseguire semplice richieste TCP, principalmente
       *            di invio e ricezione.
       *
       * Risultati:
       *
       * - Il carico - Un valore, espresso in millisecondi, che può essere aggiunto
       *   al carico esistente oppure che può sostituirlo, come
       *   determinato dall'indicatore "replace" del constructor. 
       *
       *   Maggiore è il carico, più tempo impiegherà il server a rispondere,
       *   pertanto, minore sarà il peso all'interno di Load Balancer. 
       *
       *   Se il valore è negativo, si assume un errore. Un errore da un
       *   advisor indica che il server che l'advisor sta provando a raggiungere
       *   non è accessibile ed è stato identificato come inattivo. Load Balancer non
       *   proverà a eseguire il bilanciamento carico su un server inattivo. Load Balancer
       *   ripristinerà il bilanciamento del carico sul server quando verrà ricevuto un valore        *   positivo. 
       * 
       */ 
      public int getLoad(int iConnectTime, ADV_Thread caller) 
      { 
        int iRc; 
        int iLoad = ADV_HOST_INACCESSIBLE; // -1 

        // Invia la richiesta TCP iRc = caller.send(ADV_SEND_REQUEST);
        if (iRc >= 0)
        {
            // Esegue una ricezione
            StringBuffer sbReceiveData = new StringBuffer("");
            iRc = caller.receive(sbReceiveData);

         /**
          * In modalità normale dell'advisor (indicatore "replace" impostato su false), il carico
          * restituito è 0 o 1, a indicare che il server è attivo o inattivo. 
          * Se la ricezione avviene correttamente, viene restituito un carico pari a zero
          * a indicare che deve essere utilizzato il carico integrato nell'advisor di base. 
          *
          * In caso contrario (indicatore "replace" impostato su true), viene restituito il           * valore del carico desiderato. 
          */
 
          if (iRc >= 0) 
          {
             iLoad = 0; 
          } 
        } 
        return iLoad; 
      } 
  } // End - ADV_sample
Argomento di riferimento    

Termini di utilizzo | Feedback

Ultimo aggiornamento: 31 lug 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