Ir para o conteúdo

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> ou nc -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:

  1. Edite JITTERBIT_HOME/Resources/jitterbit-agent-config.properties.

  2. 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.)

  3. 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:

  1. 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.

  2. 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:

    Exemplo de atividade de escuta

  3. 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:

projects listeners

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:

Comando
curl --silent localhost:46912/axis/v1/cdk/internal/leader | python -m json.tool
Resposta de exemplo
{
    "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:

Comando
curl --silent localhost:46912/axis/v1/cdk/internal/cluster | python -m json.tool
Resposta de exemplo
{
    "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
Resposta de exemplo
{
    "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
Resposta de exemplo
[
    {
        "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:

  1. Edite JITTERBIT_HOME/Resources/jitterbit-agent-config.properties.

  2. 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
    
  3. 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:

  1. Edite JITTERBIT_HOME/Resources/jitterbit-agent-config.properties.

  2. 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
    
  3. 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:

  1. Edite JITTERBIT_HOME/Resources/jitterbit-agent-config.properties no host do agente que falhou.

  2. Adicione esta linha:

    agent.sdk_framework.listener.running.mode=restore
    
  3. Inicie o agente.

  4. Use a API REST para consultar o status do agente.

  5. Quando o status de leaderNodeState for RESTORED, pare o agente.

  6. Edite JITTERBIT_HOME/Resources/jitterbit-agent-config.properties novamente e remova ou comente a linha adicionada na etapa 2.

  7. 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:

  1. Edite JITTERBIT_HOME/Resources/jitterbit-agent-config.properties.

  2. 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 para N.

  3. Reinicie o agente.