[AIX HP-UX Linux Solaris Windows]

Ejemplo: implementación de un asesor en la corriente

En el ejemplo siguiente se muestra cómo se implementa un asesor en la corriente. En este ejemplo se muestra la supresión del socket estándar que la base del asesor ha abierto. En su lugar, el asesor abre un socket Java en la corriente para consultar un servidor. Este procedimiento puede resultar de utilidad para los servidores que utilizan un puerto distinto del tráfico de cliente normal para realizar la escucha de una consulta del asesor.

En este ejemplo, un servidor está a la escucha en el puerto 11999 y cuando se le consulta devuelve un valor de carga con un entero hexadecimal "4". Este ejemplo se ejecuta en modalidad de sustitución, es decir, el último parámetro del constructor del asesor se establece en true y el código base del asesor utiliza el valor de carga devuelto en lugar del tiempo transcurrido.

Observe la llamada a supressBaseOpeningSocket() en la rutina de inicialización. No es necesario suprimir el socket base cuando no se van a enviar datos. Por ejemplo, quizá desee abrir el socket para asegurarse de que el asesor se puede poner en contacto con el servidor. Examine las necesidades de la aplicación cuidadosamente antes de hacer esta elección.

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; 

  // crear una matriz de bytes con el mensaje de solicitud de carga 
  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);                     // el parámetro de modalidad de sustitución es true 
    super.setAdvisor( this ); 
  } 

//-------- 
// ADV_AdvisorInitialize 
  public void ADV_AdvisorInitialize() 
  { 
    suppressBaseOpeningSocket();        // indicar al código base que no abra 
                                        // el socket estándar 
    return; 
  } 

//-------- 
// getLoad 
  public int getLoad(int iConnectTime, ADV_Thread caller) { 
    int iRc; 
    int iLoad = ADV_HOST_INACCESSIBLE;    // -1 
    int iControlPort = 11999;             // puerto en el que se comunica
                                          // con el servidor 
    String sServer = caller.getCurrentServerId(); // dirección de servidor para consulta 
    try { 
      socket soServer = new Socket(sServer, iControlPort);   // abrir socket en 
                                                             // servidor 
      DataInputStream disServer = new DataInputStream( 
                                                      soServer.getInputStream()); 
      DataOutputStream dosServer = new DataOutputStream( 
                                                      soServer.getOutputStream()); 
      int iRecvTimeout = 10000;           // establecer tiempo de espera (milisegundos) 
                                          // para recibir datos 
      soServer.setSoTimeout(iRecvTimeout); 
      dosServer.writeInt(4);              // enviar un mensaje al servidor 
      dosServer.flush(); 
      iLoad = disServer.readByte();       // recibir la respuesta del servidor 

    } catch (exception e) { 
      system.out.println("Caught exception " + e); 
    } 
    return iLoad;                         // devolver la carga notificada del servidor 
  } 
}



Referencia relacionada
Ejemplo: asesor de ejemplo
Tema de referencia Tema de referencia    

Condiciones de uso | Comentarios

last-updated-altÚltima actualización: Jul 5, 2011 11:19:44 AM EDT
Nombre de archivo: rprf_advexss.html