Histórico da Página
Para utilizar a funcionalidade de POOL Job Threas existem algumas configurações necessárias no arquivo de profile, descritas a seguir.
Configurando Lista de Appservers
Pode ser definida uma lista de Appservers para onde serão distribuídas as execuções de threads invocadas a partir de uma rotina de processamento e desta forma ocorrerá um balanceamento de carga do processamento entre appservers distintos.
Preferencialmente sugere-se que a lista de AppseServers definida sejam exclusivos para execução das threads invocadas a partir do POOL Job Threads, para não comprometer memória e performance da execução do produto/programas em Appservers que estão configurados em LoadBalance para acesar a interface do produto.
Quando a lista de AppServers não é definida, o processamento irá criar as novas threads em modo JOB no mesmo AppServer onde a aplicação principal estiver em execução, ou seja, não será realizada a distribuição de carga do processamento em AppServers distintos.
Lista de appserverse
Bloco de código | ||
---|---|---|
| ||
logix.PoolJobs.Servers = <IP_server01>:<PORT_server01>[,<IP_server02>:<PORT_server02>,...,<IP_server99>:<PORT_server99>] |
Bloco de código | ||
---|---|---|
| ||
logix.PoolJobs.Servers = <IP_server01>:<PORT_server01>[,<IP_server02>:<PORT_server02>,...,<IP_server99>:<PORT_server99>] |
1) Configurar chave de profile "logix.pooljobs.servers" para o programa que executa a função para iniciar o
POOL de JOBS ou NOME DO POOL de Jobs desejado.
CHAVE: logix.pooljobs.servers.<PROGRAMA>
Exemplo:
logix.pooljobs.servers.wvd9900=192.168.99.1:7091,192.168.99.1:7092
Neste caso a chave foi configurada para o <PROGRAMA> wvd9900, definindo que existirá apenas um unico POOL de
appservers que atenderá a processamentos multi-threads utilizando a funcionalidades POOLJOBS.
Pode-se criar também mais de um POOL para o mesmo programa, como por exemplo POOL por empresa.
Exemplo: wvd9900_01 e wvd9900_02
No profile ficaria assim:
logix.pooljobs.servers.wvd9900_01=192.168.99.1:7091,192.168.99.1:7092
logix.pooljobs.servers.wvd9900_02=192.168.99.1:7093,192.168.99.1:7094
Onde "wvd9900_01" seria um POOL para empresa "01" e "wvd9900_02" seria para empresa "02", ou seja, neste caso,
existe um pool para empresa 01 e outra pra empresa 02 (nome do pool) e cada um utiliza 2 slaves
distintos para distribuição dos processos paralelos durante a execução.
Se o programa iniciar o POOL como wvd9900_01 e este estiver definido no profile com a lista de appservers, irá
utilizar a lista de appservers definidos para a chave "logix.pooljobs.servers.wvd9900_01".
Caso a chave logix.pooljobs.servers.wvd9900_01 não estiver definida no profile, esta função PoolJobs_init() irá
rastrear automaticamente a chave de servers do pooljobs para o programa que está em execução. Neste caso, se
o programa for "wvd9900" irá procurar a lista de servers definidos para a chave "logix.pooljobs.servers.wvd9900"
e caso encontre será adotada esta lista de servers para o POOL "wvd9900_01".
A distribuição dos processos JOBS durante a execução é totalmente controlado pela base de dados, utilizando
dados registrados na tabela LOG_DADOS_SESSAO_LOGIX, pois desta forma não importa em qual appserver esteja
realizando a execução ou quais usuários estejam executando a rotina, pois a execução sendo realizada por
N processos/usuários, será capaz de identificar se determinado processo JOB previsto no pool (processos executados)
está em andamento ou não na base de dados.
EXEMPLO DE USO:
===============
1) CONFIGURAÇÃO DA CHAVE "logix.pooljobs.servers" NO PROFILE:
logix.pooljobs.servers.logix_pool=192.168.99.1:7091,192.168.99.1:7092
2) DESENVOLVIMENTO NO FONTE .4GL:
DEFINE m_pooljob_name CHAR(30)
LET m_pooljob_name = "logix_pool"
IF _ADVPL_PoolJobs_getCountProcess(m_pooljob_name) > 0 THEN
CALL LOG_Message("POOL JOBS","ERROR","Este processo já está em andamento.")
RETURN
END IF
IF NOT _ADVPL_PoolJobs_init(m_pooljob_name) THEN
CALL LOG_message("POOL JOBS","ERROR","Falha ao iniciar o POOL de appserver JOBS.",
"Lista de appservers da chave logix.jobServers para o programa estão inativos ou não foram configurados.",0)
RETURN
END IF
IF _ADVPL_PoolJobs_runProcess(m_pooljob_name,"log001_processo_01") THEN
CALL conout("Processo 01 iniciado ou já alcançou limites de processos paralelos em andamento.")
ELSE
CALL conout("Processo 01 não iniciado. Falha de conexão.")
END IF
IF _ADVPL_PoolJobs_runProcess(m_pooljob_name,"log001_processo_02") THEN
CALL conout("Processo 02 iniciado ou já alcançou limites de processos paralelos em andamento.")
ELSE
CALL conout("Processo 02 não iniciado. Falha de conexão.")
END IF
IF _ADVPL_PoolJobs_runProcess(m_pooljob_name,"log001_processo_03") THEN
CALL conout("Processo 03 iniciado ou já alcançou limites de processos paralelos em andamento.")
ELSE
CALL conout("Processo 03 não iniciado. Falha de conexão.")
END IF
IF _ADVPL_PoolJobs_runProcess(m_pooljob_name,"log001_processo_04") THEN
CALL conout("Processo 04 iniciado ou já alcançou limites de processos paralelos em andamento.")
ELSE
CALL conout("Processo 04 não iniciado. Falha de conexão.")
END IF
*/