Saltar al contenido

Servicio de escucha en agentes privados de Jitterbit

Introducción

El servicio de escucha es una característica de los agentes privados que puede ejecutar una operación de integración cuando ocurre un evento en un punto final, y puede equilibrar la carga del procesamiento de operaciones a través de un grupo de agentes.

El servicio solo funciona en grupos de agentes privados, y únicamente con los siguientes conectores y actividades:

Requisitos previos

Para utilizar el servicio de escucha, debe tener lo siguiente:

  • Agentes privados versión 10.78 / 11.16 o posterior.

  • Un número impar de agentes en un grupo de agentes. Para beneficiarse completamente de las características de balanceo de carga y tolerancia a fallos del servicio de escucha, se recomienda tener un mínimo de 3 agentes en el grupo de agentes.

  • \((N + 1) / 2\) de un total de \(N\) agentes en el grupo de agentes deben estar en funcionamiento. Por ejemplo, si hay 5 agentes en un grupo de agentes, 3 de ellos deben estar en funcionamiento.

  • Puertos TCP 5701 y 5801 abiertos en todos los hosts de agentes.

    Nota

    Dependiendo de su sistema, se pueden utilizar los siguientes comandos para probar puertos abiertos en un agente:

    • telnet <dirección del agente> <puerto>
    • netcat -vz <dirección del agente> <puerto> o nc -vz <dirección del agente> <puerto>
    • Test-NetConnection <dirección del agente> -Port <puerto> (PowerShell)

    Asegúrese de que su antivirus y firewall permitan conexiones a través de los puertos 5701 y 5801 para una prueba precisa.

  • Todos los agentes en la misma red.

Si encuentra el siguiente mensaje de error en Integration Studio, puede ser porque no ha cumplido con todos los requisitos:

Error al habilitar eventos

Error al habilitar eventos para la operación.

El clúster no ha alcanzado el tamaño mínimo requerido.

Habilitar el servicio de escucha

El servicio de escucha está deshabilitado por defecto. Debe habilitar el servicio de escucha en todos los agentes privados en un grupo, y en ambas operaciones y actividades del proyecto.

Habilitar agentes

Para habilitar el servicio, sigue estos pasos en todos los agentes privados del grupo:

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

  2. Agrega estas líneas:

    1
    2
    3
    agent.sdk_framework.listener.enabled=true
    agent.sdk_framework.listeners.matchEventsQueueToAvailableCores=true
    # agent.sdk_framework.listeners.eventsQueue=N
    
    • Línea 1: Habilita el servicio.

    • Línea 2: Establece el tamaño de la cola de eventos automáticamente.

    • Línea 3: (Opcional) Descomenta para establecer el tamaño de la cola de eventos manualmente, donde \(N\) es menor o igual al número de núcleos de procesador en el host del agente. (Si se utiliza, comenta la línea 2.)

  3. Reinicia el agente.

Habilitar operaciones y actividades

Por defecto, la escucha de eventos está deshabilitada. Para habilitar la escucha de eventos en operaciones y actividades, sigue estos pasos:

  1. Abre el proyecto y encuentra la operación que contiene la actividad de escucha. La capacidad de escucha de una actividad se muestra con un ícono en la parte superior derecha, para habilitado, o para no habilitado.

  2. Si la operación aún no está desplegada, despliega la operación. Después de que esté desplegada, el interruptor Eventos Deshabilitados aparece en la parte inferior de la operación:

    Ejemplo de actividad de escucha

  3. Para habilitar la escucha de eventos para la operación, haz clic en el interruptor Eventos Deshabilitados.

    Importante

    Habilitar o deshabilitar la escucha de eventos para una operación afecta a todas las actividades habilitadas para escuchar en la operación.

Monitorear el servicio de escucha

Puedes monitorear el estado del servicio de escucha con la Consola de Administración o la API REST.

Monitorear con la Consola de Administración

Una vez que una operación con una actividad de escucha esté desplegada, la operación y sus actividades de escucha se muestran en la pestaña Listeners de la página Proyectos de la Consola de Administración:

projects listeners

Monitor con la API REST

Puedes enviar una solicitud HTTP GET al servicio de escucha para ver información de estado. Los siguientes puntos finales de información están disponibles:

Endpoint Descripción
localhost:46912/axis/v1/cdk/internal/leader Muestra el agente líder del clúster.
localhost:46912/axis/v1/cdk/internal/cluster Muestra el estado del clúster.
localhost:46912/axis/v1/cdk/internal/starter/stats Muestra estadísticas.
localhost:46912/axis/v1/cdk/internal/members Muestra el proceso de restauración.

Consejo

Para restablecer las estadísticas, ejecuta este comando:

curl -XDELETE localhost:46912/axis/v1/cdk/internal/starter/stats

Ejemplos

Muestra el agente líder del clúster:

Comando
curl --silent localhost:46912/axis/v1/cdk/internal/leader | python -m json.tool
Respuesta de ejemplo
{
    "AgentClusterMemberUUID": "67a77314-46c7-4243-9193-bc143ece5ed0",
    "OrgId": "20980",
    "AgentId": "281020",
    "AgentHost": "192.168.64.18",
    "AgentName": "Agent 1",
    "AgentGroupId": "171230",
    "AgentGroupName": "Agent Group A"
}

Muestra el estado del clúster:

Comando
curl --silent localhost:46912/axis/v1/cdk/internal/cluster | python -m json.tool
Respuesta de ejemplo
{
    "clusterTime": 1725895381981,
    "currentNumberOfMembers": 2,
    "state": "ACTIVE",
    "hasMinimumSize": true,
    "minimumMembersRequired": 2
}

Muestra estadísticas:

curl --silent localhost:46912/axis/v1/cdk/internal/starter/stats | python -m json.tool
Respuesta de ejemplo
{
    "sdk-retryable-events-queue": 0,
    "sdk-inflight-messages-0": 0,
    "sdk-processing-events-queue-0": {
        "stats": null,
        "lastProcessedEvent": -1,
        "queueSize": 0
    }
}

Muestra miembros:

curl --silent localhost:46912/axis/v1/cdk/internal/members | python -m json.tool
Respuesta de ejemplo
[
    {
        "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 persistencia

Los mensajes enviados a un agente pueden almacenarse en una base de datos. Si el agente falla, la base de datos proporciona un almacenamiento persistente de mensajes que pueden reenviarse cuando el agente vuelva a estar en línea.

Por defecto, la base de datos PostgreSQL interna almacena esta información, pero solo para clústeres de un solo agente. Para clústeres con más de un agente, debes habilitar la persistencia manualmente.

También puedes usar una base de datos externa habilitada para JDBC o un servidor Redis.

Persistencia de múltiples agentes (PostgreSQL interno)

Para habilitar la persistencia de múltiples agentes en la base de datos PostgreSQL interna, sigue estos pasos en todos los agentes privados del grupo:

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

  2. Agrega estas líneas:

    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. Reinicia el agente.

Persistencia de múltiples agentes (JDBC externo o Redis)

Para habilitar la persistencia de múltiples agentes utilizando una base de datos externa habilitada para JDBC o un servidor Redis, sigue estos pasos en todos los agentes privados del grupo:

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

  2. Si la base de datos utiliza una conexión JDBC, agrega estas líneas:

    Configuraciones de almacenamiento persistente de base de datos habilitada para JDBC (Ejemplo)
    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
    

    Si la base de datos es Redis, agrega estas líneas:

    Configuraciones de almacenamiento persistente de Redis (Ejemplo)
    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. Reinicia el agente.

Importante

El usuario de la base de datos debe tener permisos para crear tablas, y para crear, leer, actualizar y eliminar datos.

Solución de problemas

Restauración del clúster después de la falla del agente

Si un agente falla con la persistencia habilitada, puedes restaurarlo manualmente utilizando estos pasos:

  1. Edita JITTERBIT_HOME/Resources/jitterbit-agent-config.properties en el host del agente que falló.

  2. Agrega esta línea:

    agent.sdk_framework.listener.running.mode=restore
    
  3. Inicia el agente.

  4. Usa la API REST para consultar el estado del agente.

  5. Cuando el estado de leaderNodeState sea RESTORED, detén el agente.

  6. Edita JITTERBIT_HOME/Resources/jitterbit-agent-config.properties nuevamente y elimina o comenta la línea agregada en el paso 2.

  7. Inicia el agente.

Mensajes no entregados

El mecanismo de reintento de entrega de mensajes del clúster elimina los mensajes no entregados después de un período. Para cambiar el período o suprimir la eliminación de mensajes, sigue estos pasos:

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

  2. Encuentra la siguiente línea y cambia el valor de \(N\) (en minutos):

    agent.sdk_framework.retry.deleteRetryableMessageAfter=N
    

    Consejo

    Para mantener todos los mensajes indefinidamente, utiliza el valor de -1 para N.

  3. Reinicia el agente.