WebSphere Load Balancer para IPv4 e IPv6
             Sistema operativos: AIX, HP-UX, Linux, Solaris, Windows

             Personalice la tabla de contenidos y los resultados de la búsqueda

Ejemplo: asesor de ejemplo

A continuación se muestra un archivo de asesor de ejemplo denominado ADV_sample.

/ * *
 * ADV_sample: Asesor HTTP de Load Balancer
 *
 *
 * Esta clase define un asesor personalizado de ejemplo para Load Balancer. Como todos
 * los asesores, este asesor personalizado amplía la función de la base del
 * asesor, denominada ADV_Base. Es la base del asesor que en realidad realiza la
 * mayoría de las funciones del asesor, como informar de las cargas a Load Balancer
 * para su uso en el algoritmo de peso de Load Balancer. La base del asesor también
 * realiza operaciones de cierre y conexión de sockets, y proporciona métodos
 * de envío y recepción para que el asesor los emplee. El asesor sólo se utiliza
 * para enviar y recibir datos del puerto del servidor que se está asesorando.
 * Se calcula la duración de los métodos TCP incluidos en la base del asesor para
 * calcular la carga. Un distintivo interno del constructor de ADV_base escribe
 * sobre la carga existente la nueva carga devuelta desde el asesor, si se desea. 
 *
 * Nota: en función de un valor fijado en el constructor, la base del asesor
 * suministra la carga al algoritmo de peso a intervalos especificados. Si el
 * asesor real no se ha completado y puede devolver una carga válida, la base del
 * asesor utiliza la carga anterior. 
 *
 * DENOMINACIÓN
 *
 * El convenio de denominación es el siguiente:
 *
 *  - El archivo debe estar en el siguiente directorio de Load Balancer:
 *
 *     ulb/servers/lib/CustomAdvisors/ (ulb\servers\lib\CustomAdvisors en Windows)
 *
 *  - El nombre del asesor debe ir precedido de "ADV_". Sin embargo, el asesor
 *    sólo puede empezar con el nombre; por ejemplo, el asesor "ADV_sample"
 *    puede empezar con "sample". 
 *
 *  - El nombre del asesor debe indicarse en minúsculas. 
 *
 * Por lo tanto, teniendo presente estas reglas, este ejemplo se denomina:
 *
 *     <directorio base="">/lib/CustomAdvisors/ADV_sample.class
 *
 *
 * Los asesores, al igual que el resto de Load Balancer, deben compilarse con la
 * versión prereq de Java. Para garantizar el acceso a las clases de Load Balancer,
 * asegúrese de que el archivo ibmlb.jar (que se encuentra en el subdirectorio lib
 * del directorio base) está incluido en la CLASSPATH del sistema. 
 *
 * Métodos proporcionados por ADV_Base:
 *
 * - ADV_Base (Constructor):
 *
 *   - Parámetros
 *     - String sName = Nombre del asesor
 *     - String sVersion = Versión del asesor
 *     - int iDefaultPort = Número de puerto predeterminado sobre el que asesorar
 *     - int iInterval = Intervalo sobre el que asesorar sobre los servidores
 *     - String sDefaultName = No se utiliza. Debe pasarse como "". 
 *     - boolean replace = True - sustituye el valor de carga que calcula
 *                                la base del asesor
 *                         False - añade el valor de carga que calcula
 *                                 la base del asesor
 *   - Retorno
 *     - Los constructores no tienen valores de retorno. 
 *
 * Puesto que la base del asesor se basa en hebras, tiene otros métodos
 * disponibles que un asesor puede usar. Se puede hacer referencia a estos métodos
 * con el parámetro CALLER pasado en getLoad(). 
 *
 * Estos métodos son los siguientes:
 *
 * - send - Envía un paquete de información en la conexión de socket establecida
 *          al servidor del puerto especificado. 
 * - Parámetros
 *   - String sDataString - Los datos que deben enviar en el formato de serie
 * - Retorno
 *   - int RC - Determina si los datos se han enviado satisfactoriamente; cero indica que
 *              los datos se han enviado; un entero negativo indica un error. 
 *
 * - receive - Recibe información de la conexión del socket. 
 *   - Parámetros
 *     - StringBuffer sbDataBuffer - Los datos recibidos durante la llamada de recepción
 *   - Retorno
 *     - int RC - Determina si los datos se recibieron satisfactoriamente; cero
 *                indica que los datos se enviaron; un entero negativo indica
 *                un error. 
 *
 * Si la función que proporciona la base del asesor no es suficiente,
 * puede crear la función adecuada dentro del asesor y
 * se ignorarán los métodos que proporciona la base del asesor. 
 *
 * Una pregunta importante en relación a la carga devuelta es si se debe aplicar
 * a la carga que se genera dentro de la base del asesor,
 * o se debe sustituir; hay instancias válidas para las dos situaciones. 
 *
 * Este ejemplo es fundamentalmente el asesor HTTP de Load Balancer. Funciona de una
 * forma muy simple: se emite una petición de envío: una petición de cabecera HTTP. 
 * Una vez que se recibe la respuesta, el método getLoad finaliza, indicando a la
 * base del asesor que detenga la medición del tiempo de la petición. Entonces el * método finaliza. La información devuelta no se analiza; la carga se basa en el
 * tiempo necesario para realizar las operaciones de envío y recepción. 
 */ 

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 mayoría de los protocolos de servidor requieren un retorno de
    // carro ("\r") y un salto de línea ("\n") al final de los mensajes. 
    // Si es así, inclúyalos en la serie aquí. 

    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. 
     *
     * Parámetros: Ninguno; pero el constructor de ADV_Base tiene varios parámetros
     *        que deben pasarse. 
     *
     */
     public ADV_sample()
     {
       super( ADV_NAME,
          "2.0.0.0-03.27.98",
               ADV_DEF_ADV_ON_PORT,
               ADV_DEF_INTERVAL,
               "", // no se utiliza false);
       super.setAdvisor( this );
     } 


     /**
      * ADV_AdvisorInitialize
      *
      * Se inicia cualquier inicialización específica del asesor que debe tener lugar
      * después de la base del asesor. Este método sólo se invoca una vez y
      * normalmente no se utiliza. 
      */
      public void ADV_AdvisorInitialize()
      {
        return;
      }

      /**
       * getLoad()
       *
       * La base del asesor llama a este método para completar la operación del
       * asesor, basándose en detalles específicos del protocolo. En este ejemplo del
       * asesor, sólo es necesario emitir un sólo envío y recepción; si es necesario
       * usar una lógica más compleja, se pueden emitir varios envíos y recepciones.        * Por ejemplo, una respuesta puede recibirse y analizarse. Basándose en la
       * información que se obtiene, se podría emitir otro envío y recepción. 
       *
       * Parámetros:
       *
       * - iConnectTime - La carga actual relativa al intervalo de tiempo que ha
       *                  tardado en llevarse a cabo la conexión con el servidor en
       *                  el puerto especificado. 
       *
       * - caller - Una referencia a la clase base del asesor donde los métodos
       *            que proporciona Load Balancer van a realizar peticiones TCP
       *            sencillas, principalmente envíos y recepciones.
       *
       * Resultados:
       *
       * - La carga, un valor expresado en milisegundos, que puede añadirse a la
       *   carga existente o que puede sustituir a la misma, según lo
       *   determina el distintivo "replace" del constructor. 
       *
       *   Cuánto mayor sea la carga, más tiempo se necesitará para que el servidor
       *   responda; por lo tanto, menor será el peso dentro de Load Balancer. 
       *
       *   Si el valor es negativo, se da por supuesto un error. Un error de un asesor
       *   indica que el servidor al que el asesor intenta llegar no es accesible y
       *   que se ha identificado como inactivo. Load Balancer no intentará equilibrar la
       *   carga en un servidor que está inactivo. Load Balancer reanudará el equilibrado
       *   de carga en el servidor cuando se reciba un valor positivo. 
       *
       */
      public int getLoad(int iConnectTime, ADV_Thread caller)
      {
        int iRc;
        int iLoad = ADV_HOST_INACCESSIBLE; // -1 

        // nviar petición TCP iRc = caller.send(ADV_SEND_REQUEST);
        if (iRc >= 0)
        {
            // Realizar una recepción
            StringBuffer sbReceiveData = new StringBuffer("");
            iRc = caller.receive(sbReceiveData);

         /**
          * En una modalidad de asesor normal (el distintivo "replace" es false), la carga
          * devuelta es 0 o 1, lo que indica que el servidor está activo o inactivo. 
          * Si la recepción es satisfactoria, se devuelve una carga de cero, lo
          * que indica que se va a usar la carga incluida dentro del asesor base. 
          *
          * De lo contrario (el distintivo "replace" es true), devuelva el valor de carga que desee. 
          */

          if (iRc >= 0)
          {
             iLoad = 0;
          }
        }
        return iLoad;
      }
  } // Final de - ADV_sample
Tema de referencia    

Condiciones de uso | Comentarios

Última actualización: 31 de julio de 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