Scheduling un Trabajo de Sondeo de Archivos
Esta sección le guiará sobre cómo configurar un trabajo de sondeo de archivos en su aplicación utilizando IPF File Poller.
Paso 1: Agregue la dependencia
Agregue la siguiente dependencia a su pom.xml:
<dependency>
<groupId>com.iconsolutions.ipf.filepoller</groupId>
<artifactId>ipf-file-poller-scheduler</artifactId>
</dependency>
ipf-file-poller-api viene empaquetado con ipf-file-poller-scheduler, por lo que no necesita agregar esta dependencia por separado.
|
Si importa el BOM de Icon, o utiliza el BOM de Icon como padre, no es necesario proporcionar una versión.
Paso 2: Configure un trabajo de sondeo
Se pueden crear múltiples trabajos de sondeo por aplicación de sondeo de archivos.
Para crear un trabajo de sondeo que será programado por el Programador de Sondeos de Archivos y ejecutado por el Manejador de Ejecución de Trabajo Programado de Poller de Archivos, añada la siguiente configuración a su archivo de configuración (por ejemplo,ipf.conf) utilizando 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 de sondeo de archivos |
| 2 | Parámetro que determina si el sondeador de archivos rehidratará todos los trabajos programados por el Manejador de Ejecución de Trabajo Programado de Poller de Archivos al iniciar la aplicación. |
| 3 | La lista de trabajos de sondeo que pueden ser configurados para esta aplicación de sondeo de archivos |
| 4 | El cron programa para este trabajo de votación |
| 5 | El scheduling retraso en segundos para cada trabajo que será programado por el Manejador de Ejecución de Trabajo Programado de Poller de Archivos.
Este retraso cumple dos funciones:
|
| 6 | La ubicación de los archivos que deben ser recuperados y procesados por el Manejador de Ejecución de Trabajo Programado de Poller de Archivos. |
| 7 | La política de reprogramación de archivos cambiados. Vea el Política de Reprogramación de Trabajo de Archivos Cambiados sección para más detalles sobre las políticas disponibles. |
| 8 | El tamaño del búfer en bytes para el BufferedInputStream utilizado en el hash de contenido de archivos. |
| 9 | El número máximo de archivos recuperados que pueden tener su contenido y metadatos hashados de manera concurrente. |
| 10 | Tamaño del búfer que controla el lote máximo de archivos recuperados (después de la hash) para la determinación del estado procesado. |
| 11 | Una lista de filtros comodín que pueden ser configurados para este trabajo de sondeo. |
| 12 | Un patrón de comodín que especifica que solo .xml los archivos son recuperados y procesados por el Manejador de Ejecución de Trabajo Programado de Poller de Archivos para este trabajo de encuesta. |
| 13 | Un parámetro opcional proporcionado por el IPF Persistent Scheduler que permite que los trabajos programados sean triggered retroactivamente. Puede utilizarse en conjunto con el trabajo scheduling el retraso mencionado anteriormente para reducir aún más la posibilidad de que se omita un trabajo bajo una carga de aplicación pesada. |
Paso 3: Implemente el Adaptador de Sondeo de Archivos
Después de configurar nuestro trabajo de sondeo, necesitamos crear una implementación del FilePollerAdapter interfaz, que contendrá la lógica que queremos que se llame cada vez que se programe un trabajo por el Manejador de Ejecución de Trabajo Programado de Poller de Archivos se ejecuta. 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);
}
}