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

  • Se recomienda tener un número impar de agentes en un grupo de agentes, aunque no es obligatorio. Con un número par, una interrupción de red puede dividir el grupo en dos mitades, y ninguna de las mitades tiene suficientes agentes para mantener el clúster en funcionamiento. Un número impar asegura que un lado siempre retenga suficientes agentes. También se recomienda un mínimo de 3 agentes en el grupo de agentes para beneficiarse plenamente de las características de balanceo de carga y tolerancia a fallos del servicio de escucha.

  • \((N / 2) + 1\) de un total de \(N\) agentes en el grupo de agentes, redondeado hacia abajo al número entero más cercano, debe estar en funcionamiento y unido al clúster. \(N\) cuenta todos los agentes registrados en el grupo de agentes, independientemente de si están en funcionamiento o no. Por ejemplo, un grupo de 4 agentes requiere 3 agentes en funcionamiento, y un grupo de 5 agentes también requiere 3.

  • 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 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 de un grupo, y en ambas operaciones y actividades del proyecto.

Habilitar agentes

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

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

  2. Agregue 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 automáticamente el tamaño de la cola de eventos.

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

  3. Reinicie el agente.

Habilitar operaciones y actividades

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

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

  2. Si la operación aún no está desplegada, despliegue 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, haga 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 se despliega una operación con una actividad de escucha, la operación y sus actividades de escucha se muestran en la pestaña de Listeners de la página de Proyectos de la Consola de Administración:

projects listeners

Monitorear 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
Ejemplo de respuesta
[
    {
        "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 vuelve 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, se debe habilitar la persistencia manualmente.

También se puede utilizar 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, siga estos pasos en todos los agentes privados del grupo:

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

  2. Agregue 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. Reinicie 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, siga estos pasos en todos los agentes privados del grupo:

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

  2. Si la base de datos utiliza una conexión JDBC, agregue 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, agregue 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. Reinicie 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

Para la solución de problemas relacionada, consulte lo siguiente en la guía de solución de problemas del agente privado:

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

Si un agente falla con la persistencia habilitada, se puede restaurar manualmente utilizando estos pasos:

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

  2. Agrega esta línea:

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

  4. Usa la REST API 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, usa el valor de -1 para N.

  3. Reinicia el agente.