Serviço de escuta em agentes privados do Jitterbit
Introdução
O serviço de escuta é um recurso dos agentes privados que pode executar uma operação de integração quando um evento ocorre em um endpoint e pode balancear a carga do processamento de operações em um cluster de agentes.
O serviço funciona apenas em grupos de agentes privados e somente com os seguintes conectores e atividades:
Pré-requisitos
Para usar o serviço de escuta, você deve ter o seguinte:
-
Agentes privados versão 10.78 / 11.16 ou posterior.
-
Um número ímpar de agentes em um grupo de agentes. Para aproveitar totalmente os recursos de balanceamento de carga e tolerância a falhas do serviço de escuta, é recomendável ter um mínimo de 3 agentes no grupo de agentes.
-
\((N + 1) / 2\) do total de \(N\) agentes no grupo de agentes deve estar em execução. Por exemplo, se 5 agentes estão em um grupo de agentes, 3 deles devem estar em execução.
-
Portas TCP 5701 e 5801 abertas em todos os hosts de agentes.
Nota
Dependendo do seu sistema, os seguintes comandos podem ser usados para testar portas abertas em um agente:
telnet <endereço do agente> <porta>
netcat -vz <endereço do agente> <porta>
ounc -vz <endereço do agente> <porta>
Test-NetConnection <endereço do agente> -Port <porta>
(PowerShell)
Certifique-se de que seu antivírus e firewall permitam conexões pelas portas 5701 e 5801 para testes precisos.
-
Todos os agentes na mesma rede.
Se você encontrar a seguinte mensagem de erro no Integration Studio, pode ser porque não atendeu a todos os requisitos:
Falha ao habilitar eventos
Falha ao habilitar eventos para a operação.
O cluster não atendeu ao tamanho mínimo requerido.
Habilitar o serviço de escuta
O serviço de escuta está desativado por padrão. Você deve habilitar o serviço de escuta em todos os agentes privados em um grupo, e nas operações e atividades do projeto.
Habilitar agentes
Para habilitar o serviço, siga estas etapas em todos os agentes privados do grupo:
-
Edite
JITTERBIT_HOME/Resources/jitterbit-agent-config.properties
. -
Adicione estas linhas:
1 2 3
agent.sdk_framework.listener.enabled=true agent.sdk_framework.listeners.matchEventsQueueToAvailableCores=true # agent.sdk_framework.listeners.eventsQueue=N
-
Linha 1: Habilita o serviço.
-
Linha 2: Define automaticamente o tamanho da fila de eventos.
-
Linha 3: (Opcional) Descomente para definir manualmente o tamanho da fila de eventos, onde \(N\) é menor ou igual ao número de núcleos de processador no host do agente. (Se utilizado, comente a linha 2.)
-
-
Reinicie o agente.
Habilitar operações e atividades
Por padrão, a escuta de eventos está desabilitada. Para habilitar a escuta de eventos em operações e atividades, siga estas etapas:
-
Abra o projeto e encontre a operação que contém a atividade de escuta. A capacidade de escuta de uma atividade é mostrada por um ícone no canto superior direito, para habilitado, ou para não habilitado.
-
Se a operação ainda não estiver implantada, implante-a. Após a implantação, o botão Eventos Desabilitados aparece na parte inferior da operação:
-
Para habilitar a escuta de eventos para a operação, clique no botão Eventos Desabilitados.
Importante
Habilitar ou desabilitar a escuta de eventos para uma operação afeta todas as atividades habilitadas para escuta na operação.
Monitorar o serviço de escuta
Você pode monitorar o status do serviço de escuta com o Console de Gerenciamento ou a API REST.
Monitorar com o Console de Gerenciamento
Uma vez que uma operação com uma atividade de escuta esteja implantada, a operação e suas atividades de escuta são mostradas na aba Listeners da página Projetos do Console de Gerenciamento:
Monitorar com a API REST
Você pode enviar uma solicitação HTTP GET
para o serviço de escuta para ver informações de status. Os seguintes endpoints de informação estão disponíveis:
Endpoint | Descrição |
---|---|
localhost:46912/axis/v1/cdk/internal/leader | Mostra o agente líder do cluster. |
localhost:46912/axis/v1/cdk/internal/cluster | Mostra o status do cluster. |
localhost:46912/axis/v1/cdk/internal/starter/stats | Mostra estatísticas. |
localhost:46912/axis/v1/cdk/internal/members | Mostra o processo de restauração. |
Dica
Para redefinir as estatísticas, execute este comando:
curl -XDELETE localhost:46912/axis/v1/cdk/internal/starter/stats
Exemplos
Mostre o agente líder do cluster:
curl --silent localhost:46912/axis/v1/cdk/internal/leader | python -m json.tool
{
"AgentClusterMemberUUID": "67a77314-46c7-4243-9193-bc143ece5ed0",
"OrgId": "20980",
"AgentId": "281020",
"AgentHost": "192.168.64.18",
"AgentName": "Agent 1",
"AgentGroupId": "171230",
"AgentGroupName": "Agent Group A"
}
Mostre o status do cluster:
curl --silent localhost:46912/axis/v1/cdk/internal/cluster | python -m json.tool
{
"clusterTime": 1725895381981,
"currentNumberOfMembers": 2,
"state": "ACTIVE",
"hasMinimumSize": true,
"minimumMembersRequired": 2
}
Mostre estatísticas:
curl --silent localhost:46912/axis/v1/cdk/internal/starter/stats | python -m json.tool
{
"sdk-retryable-events-queue": 0,
"sdk-inflight-messages-0": 0,
"sdk-processing-events-queue-0": {
"stats": null,
"lastProcessedEvent": -1,
"queueSize": 0
}
}
Mostre membros:
curl --silent localhost:46912/axis/v1/cdk/internal/members | python -m json.tool
[
{
"isLeader": "true",
"minClusterSize": "2",
"inetSocketAddress": "192.168.64.18",
"uuid": "67a77314-46c7-4243-9193-bc143ece5ed0",
"version": "5.0.5",
"isLiteMember": "false",
"leaderNodeState": "STARTED",
"ipv4": "true",
"inetAddress": "192.168.64.18",
"port": "5701",
"ipv6": "false",
"host": "rocky89",
"AgentName": "Agent 1",
"AgentId": "281020"
},
{
"isLeader": "false",
"minClusterSize": "2",
"inetSocketAddress": "192.168.64.25",
"uuid": "efbfab6a-0326-43c0-a4f7-f14a26a36d25",
"version": "5.0.5",
"isLiteMember": "false",
"ipv4": "true",
"inetAddress": "192.168.64.25",
"port": "5701",
"ipv6": "false",
"host": "192.168.64.25",
"AgentName": "Agent 2",
"AgentId": "281030"
}
]
Habilitar persistência
As mensagens enviadas para um agente podem ser armazenadas em um banco de dados. Se o agente falhar, o banco de dados fornece um armazenamento persistente de mensagens que podem ser reenviadas quando o agente voltar online.
Por padrão, o banco de dados PostgreSQL interno armazena essas informações, mas apenas para clusters de agente único. Para clusters com mais de um agente, é necessário habilitar a persistência manualmente.
Você também pode usar um banco de dados externo habilitado para JDBC ou um servidor Redis.
Persistência de múltiplos agentes (PostgreSQL interno)
Para habilitar a persistência de múltiplos agentes no banco de dados PostgreSQL interno, siga estas etapas em todos os agentes privados do grupo:
-
Edite
JITTERBIT_HOME/Resources/jitterbit-agent-config.properties
. -
Adicione estas linhas:
agent.sdk_framework.queueStore.enabled=true agent.sdk_framework.queueStore.type=dbinternal agent.sdk_framework.persistence.enabled=true agent.sdk_framework.persistence.type=dbinternal
-
Reinicie o agente.
Persistência de múltiplos agentes (JDBC externo ou Redis)
Para habilitar a persistência de múltiplos agentes usando um banco de dados externo habilitado para JDBC ou um servidor Redis, siga estas etapas em todos os agentes privados do grupo:
-
Edite
JITTERBIT_HOME/Resources/jitterbit-agent-config.properties
. -
Se o banco de dados usar uma conexão JDBC, adicione estas linhas:
Configurações de armazenamento persistente do banco de dados habilitado para JDBC (Exemplo)agent.sdk_framework.queueStore.enabled=true agent.sdk_framework.queueStore.type=db agent.sdk_framework.persistence.enabled=true agent.sdk_framework.persistence.type=db agent.sdk_framework.datastore.db.url=jdbc:sqlserver://harmony:1433;database=cloud agent.sdk_framework.datastore.db.user=sa agent.sdk_framework.datastore.db.password=****** agent.sdk_framework.datastore.db.databaseName=cloud agent.sdk_framework.datastore.db.dialect=org.hibernate.dialect.SQLServerDialect agent.sdk_framework.datastore.db.driver_class=com.microsoft.sqlserver.jdbc.SQLServerDriver
Se o banco de dados for Redis, adicione estas linhas:
Configurações de armazenamento persistente do Redis (Exemplo)agent.sdk_framework.queueStore.enabled=true agent.sdk_framework.queueStore.type=redis agent.sdk_framework.persistence.enabled=true agent.sdk_framework.persistence.type=redis agent.sdk_framework.datastore.redis.url=redis://redis:6379 #Optional - pool configuration agent.sdk_framework.datastore.redis.maxTotal=8 agent.sdk_framework.datastore.redis.maxIdle=8 agent.sdk_framework.datastore.redis.minIdle=0 agent.sdk_framework.datastore.redis.blockWhenExhausted=true agent.sdk_framework.datastore.redis.maxWaitMillis=-1 agent.sdk_framework.datastore.redis.testOnBorrow=false agent.sdk_framework.datastore.redis.testOnReturn=false agent.sdk_framework.datastore.redis.jmxEnabled=true
-
Reinicie o agente.
Importante
O usuário do banco de dados deve ter permissões para criar tabelas e para criar, ler, atualizar e excluir dados.
Solução de problemas
Restauração do cluster após falha do agente
Se um agente falhar com a persistência habilitada, você pode restaurá-lo manualmente usando estas etapas:
-
Edite
JITTERBIT_HOME/Resources/jitterbit-agent-config.properties
no host do agente que falhou. -
Adicione esta linha:
agent.sdk_framework.listener.running.mode=restore
-
Inicie o agente.
-
Use a API REST para consultar o status do agente.
-
Quando o status de
leaderNodeState
forRESTORED
, pare o agente. -
Edite
JITTERBIT_HOME/Resources/jitterbit-agent-config.properties
novamente e remova ou comente a linha adicionada na etapa 2. -
Inicie o agente.
Mensagens não entregues
O mecanismo de reentrega de mensagens do cluster exclui mensagens não entregues após um período. Para alterar o período ou suprimir a exclusão de mensagens, siga estas etapas:
-
Edite
JITTERBIT_HOME/Resources/jitterbit-agent-config.properties
. -
Encontre a seguinte linha e altere o valor de \(N\) (em minutos):
agent.sdk_framework.retry.deleteRetryableMessageAfter=N
Dica
Para manter todas as mensagens indefinidamente, use o valor de
-1
paraN
. -
Reinicie o agente.