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

             Personalizzazione dell'indice e dei risultati della ricerca

Esempio: Implementazione di un advisor a flusso laterale

Il seguente esempio dimostra come implementare un advisor a flusso laterale. Questo esempio illustra l'eliminazione del socket standard aperto dal codice di base dell'advisor. Questo advisor apre invece un socket Java di flusso laterale per interrogare un server. Questa procedura può essere utile per i server che utilizzano una porta diversa da quella utilizzata dal traffico normale del client per ascoltare una query dell'advisor.

In questo esempio, un server utilizza la porta 11999 e se interrogato restituisce un valore di carico con un intero esadecimale uguale a "4". Questo esempio viene eseguito in modalità di sostituzione, ovvero l'ultimo parametro del costruttore dell'advisor è impostato su true e il codice di base dell'advisor utilizza il valore di carico restituito invece del valore del tempo trascorso.

Prendere nota della chiamata a supressBaseOpeningSocket() nella routine di inizializzazione. L'eliminazione del socket di base quando non viene inviato alcun dato è un'operazione necessaria. Ad esempio, potrebbe essere necessario aprire il socket per assicurarsi che l'advisor possa contattare il server. Esaminare attentamente le necessità della propria applicazione prima di prendere una decisione del genere.

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; 

  // creare un'array di byte con il messaggio di richiesta del carico
  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);                     // il parametro in modalità di sostituzione è true     super.setAdvisor( this );
  } 

//--------
// ADV_AdvisorInitialize
  public void ADV_AdvisorInitialize()
  {
    suppressBaseOpeningSocket();        // indicare al code di base di non aprire
                                        // il socket standard
    return;
  } 

//--------
// getLoad
  public int getLoad(int iConnectTime, ADV_Thread caller) {
    int iRc;
    int iLoad = ADV_HOST_INACCESSIBLE;    // -1
    int iControlPort = 11999;             // porta su cui comunicare
                                          // con il server
    String sServer = caller.getCurrentServerId(); // indirizzo del server da interrogare
    try {
      socket soServer = new Socket(sServer, iControlPort);   // apertura socket su
                                                             // server
      DataInputStream disServer = new DataInputStream(
                                                      soServer.getInputStream());
      DataOutputStream dosServer = new DataOutputStream(
                                                      soServer.getOutputStream());
      int iRecvTimeout = 10000;           // impostazione timeout (in millisecondi)
                                          // per la ricezione di dati
      soServer.setSoTimeout(iRecvTimeout);
      dosServer.writeInt(4);              // inviare un messaggio al server
      dosServer.flush();
      iLoad = disServer.readByte();       // ricevere la risposta dal server 

    } catch (exception e) {
      system.out.println("Caught exception " + e);
    }
    return iLoad;                         // restituire il carico riportato dal server
  }
}



Riferimento correlato
Esempio: advisor di esempio
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_advexss.html