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 pueden ejecutar una operación de integración cuando ocurre un evento en un extremo y pueden equilibrar la carga del procesamiento de las operaciones en un grupo de agentes.

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

Prerrequisitos

Para utilizar el servicio de escucha, debe contar con lo siguiente:

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

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

  • Todos los agentes en la misma red.

  • Al menos 3, o \((N / 2) + 1\) de un total de \(N\) agentes en el grupo de agentes deben estar en ejecución.

Habilitar el servicio de escucha

El servicio de escucha está deshabilitado de forma predeterminada. Debes habilitarlo el servicio de escucha de todos los agentes privados de un grupo y de la operación y actividad del proyecto).

Habilitar agentes

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

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

  2. Añade 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: Habilitar el servicio.

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

    • Línea 3: (opcional) Quite el comentario para configurar el tamaño de la cola de eventos manualmente, donde \(N\) es menor o igual que la cantidad de núcleos de procesador en el alojar del agente. (Si se usa, comente la línea 2).

  3. Reinicie el agente.

Habilitar operaciones y actividades

De forma predeterminada, la escucha de eventos está deshabilitada. Para habilitar la escucha de eventos en operaciones y actividades, siga estos pasos:

  1. Abra el proyecto y busque 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 se ha implementado, desplegar. Una vez implementada, el botón 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 botón Eventos deshabilitados.

    Importante

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

Monitorizar el servicio de escucha

Puede supervisar el estado del servicio de escucha con la Management Console o la API REST.

Monitorizar con la Management Console

Una vez que se implementa una operación con una actividad de escucha, la operación y sus actividades de escucha se muestran en Escuchadores pestaña de la página Proyectos de la Management Console:

oyentes del proyecto

Monitorizar con la API REST

Puedes enviar un HTTP GET Solicitud al servicio de escucha para ver información de estado. Están disponibles los siguientes extremos de información:

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

Consejo

Para restablecer las estadísticas, ejecute este comando:

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

Ejemplos

Mostrar el agente líder del clúster:

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

Muestra el estado del clúster:

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 estadí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 miembros:

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 persistencia

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

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

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

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

  2. Añade 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 mediante una base de datos externa habilitada para JDBC o un servidor Redis, siga estos pasos en todos los agentes privados del grupo:

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

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

    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
    

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

    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 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 una falla del agente

Si un agente falla con la persistencia habilitada, puede restaurarlo manualmente siguiendo estos pasos:

  1. Editar JITTERBIT_HOME/Resources/jitterbit-agent-config.properties en el alojar del agente fallido.

  2. Añade esta línea:

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

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

  5. Cuando el estado de leaderNodeState es RESTORED, detenga al agente.

  6. Editar JITTERBIT_HOME/Resources/jitterbit-agent-config.properties nuevamente y elimine o comente la línea agregada en el paso 2.

  7. Inicie 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 para suprimir la eliminación de mensajes, siga estos pasos:

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

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

    agent.sdk_framework.retry.deleteRetryableMessageAfter=N
    

    Consejo

    Para conservar todos los mensajes indefinidamente, utilice el valor de -1 para N.

  3. Reinicie el agente.