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.

  • Recomenda-se, mas não é obrigatório, ter um número ímpar de agentes em um grupo de agentes. Com um número par, uma interrupção de rede pode dividir o grupo em duas metades, e nenhuma das metades terá agentes suficientes para manter o cluster em funcionamento. Um número ímpar garante que um lado sempre mantenha agentes suficientes. Também é recomendado ter um mínimo de 3 agentes no grupo de agentes para aproveitar totalmente os recursos de balanceamento de carga e tolerância a falhas do serviço de escuta.

  • \((N / 2) + 1\) de um total de \(N\) agentes no grupo de agentes, arredondado para baixo para o número inteiro mais próximo, deve estar em execução e conectado ao cluster. \(N\) conta todos os agentes registrados no grupo de agentes, independentemente de estarem em execução ou não. Por exemplo, um grupo de 4 agentes requer 3 agentes em execução, e um grupo de 5 agentes também requer 3.

  • 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 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 atingiu o 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 usado, comente a linha 2.)

  3. Reinicie o agente.

Habilitar operações e atividades

Por padrão, a escuta de eventos está desativada. 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 Desativados 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 Desativados.

    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 é implantada, a operação e suas atividades de escuta são exibidas 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ções estão disponíveis:

Endpoint Descrição
localhost:46912/axis/v1/cdk/internal/leader Mostrar o agente líder do cluster.
localhost:46912/axis/v1/cdk/internal/cluster Mostrar o status do cluster.
localhost:46912/axis/v1/cdk/internal/starter/stats Mostrar estatísticas.
localhost:46912/axis/v1/cdk/internal/members Mostrar 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

Mostrar 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"
}

Mostrar 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
}

Mostrar 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
    }
}

Mostrar membros:

curl --silent localhost:46912/axis/v1/cdk/internal/members | python -m json.tool
Exemplo de resposta
[
    {
        "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 a ficar online.

Por padrão, o banco de dados PostgreSQL interno armazena essas informações, mas apenas para clusters de um único agente. 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

Para solução de problemas relacionados, consulte o seguinte no guia de solução de problemas do agente privado:

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 REST API 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 tentativa de entrega 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.