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