Archivado

Archivado de paquetes y exportaciones unit of work datos en un estándar IPF Processing Data sobre. Solo unit of work s que han alcanzado un terminal state será "archivado".

Descripción general

El comportamiento de archivo se describe en el siguiente diagrama de secuencia.

Diagram
ODS Ingestion realiza la selección de candidatos y publica esos candidatos en un `ReadyForArchive` notificación a un Kafka tema.

IPF Archiver consume el notifications, y para cada candidato dentro, obtiene todos sus datos y produce un paquete de archivo, que se publica en Kafka.

Selección de Candidatos

La selección de candidatos es donde unit of work s están identificados como listos para archivar. Se realiza por ODS Ingestion, y está deshabilitado por defecto.

Los candidatos son seleccionados cuando han alcanzado un terminal state, por ejemplo, tienen un finishedAt marca de tiempo, y que esa marca de tiempo se encuentra dentro de la ventana de selección de una hora actual.

Ventana de Selección

La ventana de selección es un período de una hora. Se realizan consultas para unit of work s que han finalizado dentro de esa ventana. La ventana de selección es siempre una fecha y una hora, por ejemplo.{2023-12-18, 7} es una ventana en el 18 December 2023 con un rango de tiempo de [07:00. 08:00).

El finishedAt marca de tiempo de un unit of work debe satisfacer {finishedAt | lowerBound ⇐ finishedAt < upperBound} para ser elegible para la selección de candidatos.

Cuando todos los candidatos han sido seleccionados de una ventana, se mueve a la siguiente ventana, por ejemplo.{2023-12-18, 8}, entonces {2023-12-18, 9}, y así sucesivamente. Al final del día, p. ej.{2023-12-18, 23}, la siguiente ventana es {2023-12-19, 0}.

El finishedAt la marca de tiempo y las consultas de la ventana de selección siempre están en UTC, por ejemplo, una ventana de selección de {2023-12-18, 9} tiene un límite inferior de 2023-12-18T09:00:00Z, y un límite superior de 2023-12-18T09:59:59. 999999999Z.

Período de gracia

El período de gracia es un período de tiempo que la selección de candidatos esperará hasta que un unit of work es elegible para archivo. Debe expresarse en horas o días, y el período de gracia más pequeño es de 1 hora.

El inicio del período de gracia se calcula restando el período de gracia de la hora actual.

por ejemplo, actualmente 2023-12-18T13:49:21Z, y el período de gracia es de una hora. El límite inferior del período de gracia es la hora actual de 13, menos el período de gracia de 1 hora, lo que resulta en 2023-12-18T12:00:00Z. Debido a que se ignoran los minutos y segundos, el período de gracia suele ser mayor que el período configurado, hasta 00:59:59. 999999 más.

Comportamiento de Selección Inicial

Cuando la selección de candidatos se ejecute por primera vez, debe indicarle desde dónde comenzar, por ejemplo, la primera ventana. Si esto no está configurado explícitamente, se registrará una advertencia y la selección de candidatos fallará.

Una vez que la selección de candidatos se haya ejecutado con éxito al menos una vez, esta configuración no tendrá efecto.

Fecha

La ventana inicial puede ser una fecha de inicio configurada, que siempre es al comienzo de ese día, por ejemplo, una fecha de 2023-12-01 resulta en una ventana inicial de {2023-12-01, 0}.

Último

Toma la fecha y hora actuales, resta el período de gracia y comienza a la hora anterior a esa.

Si actualmente es 2023-12-18T13:49:21Z, la hora actual es 13. Reste el período de gracia, por ejemplo, 1 hora, lo que resulta en 12, y comience desde la hora anterior a esa, 11. La ventana inicial es {2023-12-18, 11}.

Visualización

Dado que la hora actual es 15:15, el período de gracia es 4-hours, o [11:00. 15:15], y la ventana de selección actual es [9. 10).

candidate selection 1

Una vez que todos los candidatos en la ventana de selección han sido seleccionados, lo cual puede ser en una única consulta o en muchas consultas más pequeñas, la ventana se mueve a [10. 11).

candidate selection 2

Una vez que todos los candidatos en la ventana de selección han sido seleccionados, la ventana se mueve a [11. 12).

candidate selection 3

Esta ventana de selección se encuentra ahora dentro del período de gracia. No se seleccionan candidatos hasta que el tiempo avanza, de tal manera que la ventana de selección esté fuera del período de gracia.

candidate selection 4

Cuando la hora actual llegue a 16:00, el período de gracia se convierte en [12:00. 16:00], y la ventana de selección [11:00. 12:00) se vuelve elegible. Los candidatos dentro de esta ventana serán seleccionados ahora.

Listo para archivar Notifications

Los candidatos que son seleccionados para archivo se publican en un ReadyForArchive notificación, que contiene los candidatos seleccionados, la ventana en la que fueron seleccionados y su número de secuencia dentro de la ventana de selección actual.

Cada notificación indicará si es la última notificación para la ventana actual.

Ejemplos

Si hay tres candidatos para la hora 12, y el tamaño de recuperación es 2, lo siguiente notifications podría ser enviado.

{
  "candidates": ["unit-of-work-1", "unit-of-work-2"],
  "window": {
    "date": "2023-12-18",
    "hour": 12,
    "notificationSequence": 1
  },
  "lastNotificationInWindow": false
}
{
  "candidates": ["unit-of-work-3"],
  "window": {
    "date": "2023-12-18",
    "hour": 12,
    "notificationSequence": 2
  },
  "lastNotificationInWindow": true
}

Si no hay candidatos para la hora 13, se enviaría la siguiente notificación.

{
  "candidates": [],
  "window": {
    "date": "2023-12-18",
    "hour": 13,
    "notificationSequence": 1
  },
  "lastNotificationInWindow": true
}

State

Selección de candidatos state se crea en la primera ejecución y se actualiza en cada ejecución subsiguiente.

La inicial state podría verse algo como..

{
  "date": "2023-12-18",
  "hour": "12",
  "checkpoint": null,
  "notificationSequence": 1
}

La fecha y la hora representan la ventana de selección actual.

El punto de control es el último candidato que vimos dentro de la ventana.

La secuencia de notificación es un número que se incrementa en cada ejecución hasta que se avanza la ventana, momento en el cual vuelve a ser 1.

Cuando se seleccionan candidatos para esto state, se actualiza.

{
  "date": "2023-12-18",
  "hour": "12",
  "checkpoint": "unit-of-work-6",
  "notificationSequence": 2
}

Si no hay más candidatos en la ventana, pasamos a la siguiente ventana.

{
  "date": "2023-12-18",
  "hour": "13",
  "checkpoint": null,
  "notificationSequence": 1
}

Configuración

La selección de candidatos se ejecuta con frecuencia y selecciona un número máximo de candidatos en cada ejecución. Puede controlar el rendimiento de la selección de candidatos configurando tanto la frecuencia de ejecución como el tamaño de recuperación para cada ejecución.

Todas las propiedades de configuración están precedidas por ipf.archiver.candidate-selection.

Configuración de Selección de Candidatos por Defecto
ipf {
  archiver {
    candidate-selection {
      enabled = false

      # Define what should happen when candidate selection is executed for the first time
      initial-execution-behaviour {
        # Define the initial window for candidate selection, e.g. the time period in which to search for finished unit of works.
        # LATEST    = The latest window given the current datetime and the grace period
        # DATE      = Define a specific date with a `start-date` property, e.g. `start-date = 2023-11-01`
        # UNDEFINED = The default. Candidate selection will fail if this property is used on the first execution
        window = UNDEFINED

        # An example start-date when a specific date is used (window = DATE) for the initial window
        # start-date = 2023-11-01
      }

      # Minimum time to wait before selecting a candidate unit of work once it has reached a terminal state
      grace-period = 2H

      # How many archive candidates to fetch on each invocation of the scheduler (see scheduler config below)
      fetch-size = 1000

      # Journey types to select for archive. If null or empty, then any journey type will be archived
      eligible-journey-types = []

      scheduler {
        # How long to wait once ODS has started before checking for archive candidates
        initial-delay = 1M

        # How often to check for archive candidates, fetching `fetch-size` candidates each time. See `fetch-size` above.
        frequency = 10s

        restart-settings {
          min-backoff = 1s
          max-backoff = 1s
          jitter-factor = 0. 2
        }
      }
    }
  }
}
Propiedad Predeterminado Descripción

enabled

false

Permite la selección de candidatos, que está desactivada por defecto.

grace-period

2H

Un período de tiempo expresado en horas, por ejemplo.2H, o días, p. ej.365D.

fetch-size

1000

El número máximo de candidatos a seleccionar cada vez que se ejecute la selección de candidatos.

eligible-journey-types

[]

Define los tipos de unidad o trabajo que son elegibles para archivo. Por defecto, todos unit of work los tipos serán archivados. Configurando con [PAYMENT] significaría solo unit of work s con el tipo de viaje PAYMENT sería archivado.

Comportamiento Inicial de Ejecución

Todas las propiedades de configuración están precedidas por ipf.archiver.candidate-selection.initial-execution-behaviour.

Propiedad Predeterminado Descripción

window

UNDEFINED

O bien DATE, o LATEST. Si utiliza DATE,start-date debe ser definido. Si la selección de candidatos está habilitada y se ejecuta por primera vez cuando esta propiedad se deja como UNDEFINED, la selección de candidatos fracasará.

start-date

La fecha de inicio de la ventana de ejecución inicial, por ejemplo,2023-12-18.

Scheduler

Todas las propiedades de configuración están precedidas por ipf.archiver.candidate-selection.scheduler.

Propiedad Predeterminado Descripción

initial-delay

1M

El período de tiempo que debe esperar una vez que la aplicación ha comenzado antes de comenzar a buscar candidatos para el archivo. Por defecto, espera 1 minuto.

frequency

10s

Con qué frecuencia se ejecuta la selección de candidatos. Por defecto, es cada 10 segundos.

Scheduler la configuración del supervisor de manejo de errores se encuentra bajo `ipf.archiver.candidate-selection.scheduler.restart-settings`.
Propiedad Predeterminado Descripción

min-backoff

1s

max-backoff

1s

jitter-factor

0. 2

Agrupación de Archivos

Los paquetes de archivo se producen como IPF Processing Data sobres que contienen datos para un solo unit of work. Los datos se construyen consultando el ODS base de datos directamente.

 ODS consume IPF Processing Data sobres, y transforma y persiste en su propio modelo de datos.
La archivación toma el ODS modelo y se transforma de nuevo en el IPF Processing Data modelo.

Los paquetes de archivo se producen en IPF Processing Data esquema V2 por defecto.

Los paquetes de archivo también se producen sin una vista de resumen relacionada con el unit of work por defecto. Esto puede ser cambiado configurando ipf.archiver.bundle.includes-summary = true esto incluirá la vista resumen en un custom representación de objeto.

A continuación se presenta una representación de la custom objeto que contiene la vista de resumen. Mientras que la vista de resumen es una cadena, puede ser deserializada en un objeto desde el ODS Inquiry API specification. El exacto ODS Inquiry el objeto de esquema se definirá en el key campo. En el ejemplo a continuación, el ODS Inquiry el objeto de esquema utilizado es el SummaryView.

Ejemplo de Resumen Custom Objeto
{
"key": "SummaryView",
"value": "{\"class\":\"SummaryView\",\"createdAt\":\"2023-12-04T11:00:00Z\",\"unitOfWorkId\":\"unit-of-work-3\",\"terminal\":false,\"failure\":false,\"clientRequestId\":\"KNOWN\",\"processingEntity\":\"processing-entity-3\"}",
"uniqueId": "a91e3f60-0da6-49e8-bdec-958c51218bb9",
"createdAt": "2025-03-14T15:08:31. 440Z"
}

Manejo de Errores

Cualquier error generado durante la agrupación de archivos se registra como un error sin que se tome ninguna acción. Sin embargo, hay una opción adicional system event de tipo ArchiveBundlingFailed, se le requerirá configurar ipf.procesamiento-datos-salida.

Datos

No todos los datos recibidos por ODS lo incluye en el paquete de archivo. En algunos casos, los datos se ignoran completamente; en otros casos, solo se incluye la última versión de un objeto particular. Datos que no pertenecen a un unit of work is ignored.

Datos ODS ¿Incluido en el paquete? Notas

Message Log

Process Flow Event

MDS

Todas las versiones de todos MDS se incluyen objetos

PDS

Todas las versiones de todos PDS se incluyen objetos

Custom Objeto

Todo custom se incluyen objetos, así como un custom representación de objeto de la vista resumen relacionada con el unit of work, si está habilitado.

System Event

no

System events para un unit of work are ignored.

Process Flow Definición

no

Process Flow Definitions no pertenecen a un unit of work

Exportar

Los paquetes se exportan a Kafka.

Configuración

Configuración del Exportador de Notificaciones ReadyForArchive por Defecto
ipf.archiver.candidate-selection {
  # Archiver connectors disabled by default
  enabled = false
  exporter {
    # Default resiliency settings applied to the exporter SendConnector
    max-attempts = 5
    minimum-number-of-calls = 10
    initial-retry-wait-duration = 1s

    kafka {
      # Kafka producer config specifying topic, client id and restart-settings for the exporter KafkaConnectorTransport
      producer {
        topic = IPF_ARCHIVER_CANDIDATES
        restart-settings = {
          min-backoff = 1s
          max-backoff = 5s
          random-factor = 0. 25
          max-restarts = 5
          max-restarts-within = 10m
        }
        kafka-clients {
          client.id = ipf-achiver-candidate-exporter-client
        }
      }
    }
  }
}
# Configure to false if summaries are not being used in ODS Ingestion
ods.summary.enabled = true
Deshabilitar ods.summary.enabled si ODS Ingestion la instancia no produce ningún documento de resumen.

IPF Archiver

IPF Archiver es una aplicación ejecutable que consume ReadyForArchive notifications, y construye y exporta paquetes de archivo para cada candidato que contiene.

El Archiver IPF debe ser implementado junto con un ODS Ingestion instancia. ODS Ingestion realizará la selección de candidatos y enviará notifications.

Tanto IPF Archiver como ODS Ingestion compartirá una instancia de base de datos.

Consumiendo Paquetes de Ipf Archiver

Para consumir los paquetes de archivo, usted deberá implementar com.iconsolutions.ipf.archiver.bundle. IpfArchiverBundleHandler y regístrelo como un spring bean. Además, deberá depender del módulo 'ipf-archiver-bundle-consumer' que instancia un receive connector para el IPF_ARCHIVER_BUNDLES kafka tema.

ipf-archiver-bundler-api`proporciona el `IpfArchiverBundleHandler interfaz:

<dependency>
    <groupId>com.iconsolutions.ipf.archiver</groupId>
    <artifactId>ipf-archiver-bundler-api</artifactId>
</dependency>

ipf-archiver-bundler-consumer provides a predefined receive connector for the IPF_ARCHIVER_BUNDLES kafka topic. This connector uses IpfArchiverBundleHandler to handle the received bundles:

This dependency will also pull in ipf-archiver-bundler-api as a transitive dependency
<dependency>
    <groupId>com.iconsolutions.ipf.archiver</groupId>
    <artifactId>ipf-archiver-bundler-consumer</artifactId>
</dependency>

Configuración

Configuración de Consumidor del Paquete Predeterminado
ipf.archiver.bundle.consumer {
  resiliency {
    max-attempts = 30
  }
  kafka {
    # Kafka consumer config specifying topic, group id and restart-settings for the consumer KafkaReceiveConnectorTransport
    consumer {
      topic = IPF_ARCHIVER_BUNDLES
      restart-settings = {
        min-backoff = 1s
        max-backoff = 5s
        random-factor = 0. 25
        max-restarts = 5
        max-restarts-within = 10m
      }
      kafka-clients {
        group.id = ipf-achiver-bundle-consumer-group
      }
    }
  }
}