Ir para o conteúdo

Serviço de escuta em agentes privados Jitterbit

Introdução

O serviço de escuta é um recurso de agentes privados que podem executar uma operação de integração quando um evento acontece em um endpoint e podem balancear a carga do processamento de operações em um cluster de agentes.

O serviço funciona apenas em grupos de agentes privados e apenas 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.8 ou posterior.

  • Portas TCP 5701 e 5801 abertas em todos os hosts de agentes.

  • Todos os agentes na mesma rede.

  • Pelo menos 3, ou \((N / 2) + 1\) de um total de \(N\) agentes no grupo de agentes devem estar em execução.

Habilitar o serviço de escuta

O serviço de escuta é desabilitado por padrão. Você deve habilitar o serviço de escuta de todos os agentes privados de um grupo e da operação e atividade do projeto.

Habilitar agentes

Para habilitar o serviço, siga estas etapas em todos os agentes privados do grupo:

  1. Editar 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: Habilitar o serviço.

    • Linha 2: Define o tamanho da fila de eventos automaticamente.

    • Linha 3: (Opcional) Descomente para definir o tamanho da fila de eventos manualmente, onde \(N\) é menor ou igual ao número de núcleos de processador no hospedar 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á 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, implantar -a. Após a implantação, o botão de alternância 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 de alternância Eventos desabilitados.

    Importante

    Habilitar ou desabilitar a escuta de eventos para uma operação afeta todas as atividades com escuta habilitada na operação.

Monitore o serviço de escuta

Você pode monitorar o status do serviço de escuta com o Management Console ou a API REST.

Monitore com o Management Console

Depois que uma operação com uma atividade de ouvinte é implantada, a operação e suas atividades de escuta são mostradas em Ouvintes aba da página Projetos do Management Console:

ouvintes de projetos

Monitore com a API REST

Você pode enviar um HTTP GET solicitação ao 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 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:

Command
curl --silent localhost:46912/axis/v1/cdk/internal/leader | python -m json.tool
Example response
{
    "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:

Command
curl --silent localhost:46912/axis/v1/cdk/internal/cluster | python -m json.tool
Example response
{
    "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
Example response
{
    "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
Example response
[
    {
        "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

Mensagens enviadas a 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 somente para clusters de agente único. Para clusters com mais de um agente, você deve habilitar manualmente a persistência.

Você também pode usar um banco de dados externo habilitado para JDBC ou um servidor Redis.

Persistência multiagente (PostgreSQL interno)

Para habilitar a persistência de vários agentes no banco de dados interno PostgreSQL, siga estas etapas em todos os agentes privados do grupo:

  1. Editar 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 multiagente (JDBC externo ou Redis)

Para habilitar a persistência de vários agentes usando um banco de dados externo habilitado para JDBC ou um servidor Redis, siga estas etapas em todos os agentes privados no grupo:

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

  2. Se o banco de dados usar uma conexão JDBC, adicione estas linhas:

    JDBC-enabled database persistent store settings (Example)
    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:

    Redis persistent store settings (Example)
    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 de cluster após falha do agente

Se um agente falhar com a persistência habilitada, você pode restaurá-lo manualmente usando estas etapas:

  1. Editar JITTERBIT_HOME/Resources/jitterbit-agent-config.properties no hospedar do agente com falha.

  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 para leaderNodeState é RESTORED, pare o agente.

  6. Editar 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 repetição de entrega de mensagens de 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. Editar 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.