[AIX HP-UX Linux Solaris Windows]

Exemplo: Orientador de Amostra

Esse é um arquivo de orientador de amostra chamado ADV_sample.

/ * * 
 * ADV_sample: Orientador HTTP do Load Balancer 
 * 
 * 
 * Essa classe define um orientador customizado de amostra para o Load Balancer. Como todos os 
 * orientadores, esse orientador customizado estende a função do orientador base, 
 * chamado ADV_Base. É o orientador base que realmente executa a maioria das 
 * funções do orientador, como relatar carregamentos de volta para o Load Balancer 
 * para uso no algoritmo de peso do Load Balancer. O orientador base também 
 * executa operações de conexão e de fechamento de soquete e fornece métodos de envio e 
 * de recebimento para uso pelo orientador. O orientador em si é usado apenas para 
 * enviar e receber dados para e da porta no servidor que está sendo 
 * orientado. Os métodos TCP no orientador base são cronometrados para calcular 
 * o carregamento. Um sinalizador no construtor no ADV_base sobrescreve o carregamento 
 * existente com o novo carregamento retornado a partir do orientador, se desejado. 
 * 
 * Nota: Baseado em um valor configurado no construtor, o orientador base fornece 
 * o carregamento para o algoritmo de peso em intervalos especificados. Se o orientador 
 * real não for concluído para poder retornar um carregamento válido, o orientador base 
 * usará o carregamento anterior. 
 * 
 * NOMENCLATURA 
 * 
 * A convenção de nomenclatura é a seguinte: 
 * 
 *  - O arquivo deve estar localizado no seguinte diretório do Load Balancer: 
 * 
 *     ulb/servers/lib/CustomAdvisors/ (ulb\servers\lib\CustomAdvisors no Windows) 
 * 
 *  - O nome do Orientador deve ser precedido de "ADV_". O orientador pode ser iniciado 
 *    apenas com o nome, entretanto, por exemplo, o orientador "ADV_sample" 
 *    pode ser iniciado com "amostra". 
 * 
 *  - O nome do orientador deve estar em minúsculo. 
 * 
 * Com essas regras em mente, portanto, essa amostra é referida como:
 * 
 *     <diretório base="">/lib/CustomAdvisors/ADV_sample.class 
 * 
 *
 * Os orientadores, tal como o resto do Load Balancer, devem ser compilados com a versão 
 * de pré-requisito de Java. Para assegurar o acesso às classes do Load Balancer, certifique-se de que o 
 * arquivo ibmlb.jar (localizado no subdiretório lib do diretório 
 * base) esteja incluído no CAMINHO DE CLASSE do sistema. 
 * 
 * Métodos fornecidos pelo ADV_Base: 
 * 
 * - ADV_Base (Construtor): 
 * 
 *   - Parâmetros 
 *     - String sName = Nome do orientador 
 *     - String sVersion = Versão do orientador 
 *     - int iDefaultPort = Número da porta padrão para orientar 
 *     - int iInterval = Intervalo no qual os servidores serão orientados 
 *     - String sDefaultName = Não Usado. Deve ser transmitido como "". 
 *     - boolean replace = True - substitui o valor de carregamento que está sendo calculado 
 *                                pelo orientador base 
 *                         False - incluir ao valor de carregamento que está sendo calculado 
 *                                pelo orientador base 
 *   - Retorno 
 *     - Os construtores não possuem valores de retorno 
 * 
 * Como o orientador base é um encadeamento baseado, ele possui vários outros métodos 
 * disponíveis para uso por um orientador. Esses métodos podem ser referidos usando o parâmetro 
 * CALLER transmitido em getLoad(). 
 * 
 * Esses métodos são os seguintes: 
 *  
 * - send - Enviar um pacote de informações na conexão de soquete estabelecida  
 *          com o servidor na porta especificada 
 *   - Parâmetros 
 *   - String sDataString - Os dados a serem enviados no formato de uma cadeia 
 *   - Retorno
 *   - int RC - Especifica se os dados foram enviados com sucesso ou não: zero indica 
 *              que os dados foram enviados; um número inteiro negativo indica um erro. 
 * 
 * - receive - Receber informações da conexão do soquete. 
 *   - Parâmetros 
 *     - StringBuffer sbDataBuffer - Os dados recebidos durante a chamada de recebimento 
 *   - Retorno 
 *   - int RC - Especifica se os dados foram recebidos com sucesso ou não; zero indica 
 *                dados que foram recebidos; um número inteiro negativo indica 
 *                um erro. 
 * 
 * Se a função fornecida pelo orientador base não for suficiente, 
 * você poderá criar a função apropriada no orientador e 
 * os métodos fornecidos pelo orientador base serão então ignorados. 
 * 
 * Uma questão importante referente ao carregamento retornado é se ele será aplicado 
 * ao carregamento que está sendo gerado no orientador base, 
 * ou substituído; há instâncias válidas de ambas as situações. 
 * 
 * Essa amostra é essencialmente o orientador HTTP do Load Balancer. Ela funciona 
 * muito simples: um pedido de envio - um pedido principal http - é emitido. Quando uma 
 * resposta é recebida, o método getLoad é terminado, sinalizando o orientador base 
 * a parar de cronometrar o pedido. O método é então concluído. O 
 * informações retornadas não são analisadas e o carregamento é baseado no tempo 
 * necessário para executar as operações de envio e de recebimento. 
 */ 

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: A maioria dos protocolos do servidor requer um retorno de linha ("\r") e uma nova 
    // linha ("\n") no final das mensagens. Se for o caso, inclua-as na sua 
    // cadeia aqui. 
    
    static final String ADV_SEND_REQUEST = 
       "HEAD / HTTP/1.0\r\nAccept:  */ *\r\nUser-Agent: " + 
       "IBM_Load_Balancer_HTTP_Advisor\r\n\r\n"; 

    /** 
     * Construtor. 
     * 
     * Parâmetros: Nenhum, mas o construtor para ADV_Base possui vários parâmetros 
     *        que devem ser transmitidos a ele. 
     * 
     */ 
     public ADV_sample() 
     { 
       super( ADV_NAME, 
          "2.0.0.0-03.27.98", 
               ADV_DEF_ADV_ON_PORT, 
               ADV_DEF_INTERVAL, 
               "", // not used false); 
       super.setAdvisor( this );
     } 


     /**
      * ADV_AdvisorInitialize  
      *
      * Qualquer inicialização específica do orientador que deve ocorrer após o orientador 
      * base ser iniciado. Esse método é chamado uma vez e 
      * normalmente não é usado. 
      */
      public void ADV_AdvisorInitialize()
      {
        return;
      }

      /**
       * getLoad() 
       * 
       * Esse método é chamado pelo orientador base para concluir a operação do
       * orientador com base nos detalhes específicos para o protocolo. Nesse orientador
       * de amostra, apenas um único envio e recebimento é necessário; se uma lógica  
       * mais complexa for necessária, vários envios e recebimentos poderão ser emitidos. Por  
       * exemplo, uma resposta pode ser recebida e analisada. Com base nas informações  
       * aprendidas aqui, outro envio e recebimento pode ser emitido.  
       *  
       * Parâmetros:  
       *  
       * - iConnectTime - O carregamento atual conforme é referido à quantia de tempo necessária  
       *                  para concluir a conexão com o servidor por meio da porta  
       *                  especificada.  
       *  
       * - caller - Uma referência à classe do orientador base onde os métodos fornecidos do  
       *            Load Balancer devem executar pedidos TCP simples,  
       *            principalmente envio e recebimento.
       * 
       * Resultados: 
       * 
       * - O carregamento - Um valor, expresso em milissegundos, que pode ser incluído no carregamento 
       *   existente ou que pode substituir o carregamento existente, conforme determinado 
       *   pelo sinalizador "replace" do construtor. 
       * 
       *   Quanto maior o carregamento, mais tempo demorará o servidor para responder;  
       *   portanto, menor será o peso dentro do Load Balancer. 
       *  
       *   Se o valor for negativo, um erro será assumido. Um erro a partir de um  
       *   orientador indica que o servidor ao qual o orientador está tentando acessar não está  
       *   acessível e foi identificado como estando inativo. O Load Balancer tentará  
       *   efetuar o balanceamento de carga em um servidor que está inativo. O Load Balancer tentará  
       *   continuar o balanceamento de carga no servidor quando um valor positivo for recebido. 
       * 
       */ 
      public int getLoad(int iConnectTime, ADV_Thread caller) 
      { 
        int iRc; 
        int iLoad = ADV_HOST_INACCESSIBLE; // -1 

        // Send tcp request iRc = caller.send(ADV_SEND_REQUEST);
        if (iRc >= 0) 
        { 
            // Executar um recebimento 
            StringBuffer sbReceiveData = new StringBuffer(""); 
            iRc = caller.receive(sbReceiveData); 
         
         /**
          * No modo do orientador normal (o sinalizador "replace" é false), o carregamento 
          * retornado é 0 ou 1 indicando que o servidor está ativo ou inativo. 
          * Se o recebimento for bem sucedido, um carregamento zero será retornado 
          * indicando que a construção de carregamento no orientador base deve ser usada. 
          * 
          * Caso contrário (o sinalizador "replace" é true), retorne o valor de carregamento desejado. 
          */
 
          if (iRc >= 0) 
          {
             iLoad = 0; 
          } 
        } 
        return iLoad; 
      } 
  } // End - ADV_sample
Tópico de Referência Tópico de Referência    

Termos de Uso | Feedback

Última atualizaçãoÚltima atualização: Jun 28, 2011 4:11:22 PM EDT
Nome do arquivo: rprf_advexample.html