Programar un trabajo de sondeo de archivos
Esta sección te guiará sobre cómo configurar un trabajo de sondeo de archivos en tu aplicación usando IPF File Poller.
Paso 1: Agregar la dependencia
Agrega la siguiente dependencia a tu pom.xml:
<dependency>
<groupId>com.iconsolutions.ipf.filepoller</groupId>
<artifactId>ipf-file-poller-scheduler</artifactId>
</dependency>
NOTA: ipf-file-poller-api viene incluido con ipf-file-poller-scheduler, por lo que no necesitas agregar esta dependencia por separado.
Si importas el Icon BOM, o usas el Icon BOM como padre, no es necesario suministrar una versión.
Paso 2: Configurar un trabajo de sondeo
Se pueden crear múltiples trabajos de sondeo por aplicación de file poller.
Para crear un trabajo de sondeo que será programado por el Planificador de File Poller y ejecutado por el Controlador de ejecución de trabajos programados del File Poller, agrega la siguiente configuración a tu archivo de configuración (por ejemplo, ipf.conf) usando el ejemplo a continuación como guía:
ipf.file-poller {
application-id = default-id (1)
rehydrate-scheduler-jobs = true (2)
pollers = [ (3)
{
cron= "*/10 * * ? * *" (4)
job-schedule-seconds = "20" (5)
file-path = "/app/share/ipf/inbound" (6)
changed-file-job-reschedule-policy = ALWAYS (7)
file-content-hash-buffer-bytes = 8192 (8)
file-processing-parallelism = 128 (9)
file-processing-buffer = 500 (10)
patterns = [ (11)
"*.xml" (12)
]
}
]
}
ipf.persistent.scheduler.past-acceptance-window = 30s (13)
| 1 | El identificador de la aplicación del file poller |
| 2 | Parámetro que determina si el file poller rehidratará todos los trabajos programados por el Controlador de ejecución de trabajos programados del File Poller al inicio de la aplicación. |
| 3 | La lista de trabajos de sondeo que se pueden configurar para esta aplicación de file poller |
| 4 | El cron de programación para este trabajo de sondeo |
| 5 | El retraso de programación en segundos para cada trabajo que será programado por el Controlador de ejecución de trabajos programados del File Poller.
Este retraso cumple dos funciones:
|
| 6 | La ubicación de los archivos que serán recuperados y procesados por el Controlador de ejecución de trabajos programados del File Poller. |
| 7 | La política de reprogramación para archivos cambiados. Consulta la sección Changed File Job Re-schedule Policy para más detalles sobre las políticas disponibles. |
| 8 | El tamaño del búfer en bytes para el BufferedInputStream utilizado en el hashing del contenido del archivo |
| 9 | El número máximo de archivos recuperados que pueden tener su contenido y metadatos con hash de forma concurrente. |
| 10 | Tamaño del búfer que controla el lote máximo de archivos recuperados (después del hashing) para la determinación del estado de procesamiento. |
| 11 | Una lista de filtros con comodines que se pueden configurar para este trabajo de sondeo. |
| 12 | Un patrón con comodines que especifica que solo los archivos .xml serán recuperados y procesados por el Controlador de ejecución de trabajos programados del File Poller para este trabajo de sondeo. |
| 13 | Un parámetro opcional proporcionado por el IPF Persistent Scheduler que permite activar trabajos programados de forma retroactiva. Se puede usar junto con el retraso de programación de trabajos mencionado arriba para reducir aún más la posibilidad de que se omita un trabajo bajo una alta carga de la aplicación. |
Paso 3: Implementar el File Poller Adapter
Después de configurar nuestro trabajo de sondeo, necesitamos crear una implementación de la interfaz FilePollerAdapter, que contendrá la lógica que queremos que se invoque cada vez que se ejecute un trabajo programado por el Controlador de ejecución de trabajos programados del File Poller. Un ejemplo de esto se muestra a continuación:
@RequiredArgsConstructor
public class FilePollerAdapterImpl implements FilePollerAdapter {
private final NotificationSender notificationSender;
@Override
public CompletionStage<Void> triggerFileProcessing(FileDetails fileDetails) {
File file = new File(fileDetails.getFilePath());
FilePolledNotification filePolledNotification = FilePolledNotification.builder()
.fileName(file.getName())
.configName("pain.001.001.09")
.fileProvider("local")
.filePath(fileDetails.getFilePath())
.build();
return notificationSender.send(filePolledNotification)
.thenApply(ignored -> null);
}
}