[AIX HP-UX Linux Solaris Windows]

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.

Notare la 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 della modalità di sostituzione è true 
    super.setAdvisor( this ); 
  } 

//-------- 
// ADV_AdvisorInitialize 
  public void ADV_AdvisorInitialize() 
  { 
    suppressBaseOpeningSocket();        // indicare al codice 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 del socket sul 
                                                             // server 
      DataInputStream disServer = new DataInputStream( 
                                                      soServer.getInputStream()); 
      DataOutputStream dosServer = new DataOutputStream( 
                                                      soServer.getOutputStream()); 
      int iRecvTimeout = 10000;           // impostare il timeout (in millisecondi) 
                                          // per la ricezione dei 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 
  } 
}



Riferimenti correlati
Esempio: advisor di esempio
Argomento di riferimento Argomento di riferimento    

Termini di utilizzo | Feedback

last-updated-altUltimo aggiornamento: Jun 23, 2011 11:26:00 AM EDT
Nome file: rprf_advexss.html