En el ejemplo siguiente se muestra cómo utilizar un asesor personalizado estándar.
El asesor funciona en modalidad normal, por lo que la medición de carga se basa en el tiempo transcurrido, en milisegundos, necesario para realizar las operaciones de apertura, envío, recepción y cierre de socket.
package CustomAdvisors;
import com.ibm.internet.lb.advisors.*;
public class ADV_sample extends ADV_Base implements ADV_MethodInterface {
static final String ADV_NAME ="Sample";
static final int ADV_DEF_ADV_ON_PORT = 80;
static final int ADV_DEF_INTERVAL = 7;
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
public ADV_sample() {
super(ADV_NAME, "3.0.0.0-03.31.00",
ADV_DEF_ADV_ON_PORT, ADV_DEF_INTERVAL, "",
false);
super.setAdvisor( this );
}
//--------
// ADV_AdvisorInitialize
public void ADV_AdvisorInitialize() {
return; // normalmente es una rutina vacía
}
//--------
// getLoad
public int getLoad(int iConnectTime, ADV_Thread caller) {
int iRc;
int iLoad = ADV_HOST_INACCESSIBLE; // inicializar a inaccesible
iRc = caller.send(ADV_SEND_REQUEST); // enviar solicitud HTTP
// al servidor
if (0 <= iRc) { // si el envío es satisfactorio,
StringBuffer sbReceiveData = new StringBuffer(""); // asignar un almacenamiento intermedio
// para la respuesta
iRc = caller.receive(sbReceiveData); // recibir el resultado
// analizar el resultado aquí si es necesario
if (0 <= iRc) { // si la recepción es satisfactoria
iLoad = 0; // devolver 0 para resultado correcto
} // (se omite el valor de carga del asesor por
} // base en modalidad normal)
return iLoad;
}
}