Architettura e flussi
Componenti principali
Scheduler(modules/main.js): bootstrap, settings, RedisBus, lifecycle servizio;SchedulerCore(modules/schedulerCore.js): orchestration job e reload cache;SchedulerEngine(modules/schedulerEngine.js): scheduling cron, esecuzione HTTP, retry, gestione hook async;schedulerJobsClient(modules/schedulerJobsClient.js): CRUD versodatahubsuscheduler_jobs.
Flusso di bootstrap
- Il servizio si inizializza (
main.init) e connette RedisBus. - Carica settings da
DATAHUB_URL/DBMANAGER_URL. - Avvia
SchedulerCore. SchedulerCorecaricascheduler_jobsda datahub e passa i job al motore.SchedulerEnginecrea task cron (node-cron) e si sottoscrive a hook Redis (<ENV>.*.status.HOOK).
Flusso di esecuzione job
- Trigger cron (o run manuale) avvia
_runJob. - Risolve placeholder runtime in URL/header/body (
[[today]], ecc.). - Se URL e interno (
/internal/*), firma tokenx-internal-token. - Esegue chiamata HTTP verso microservizio target.
- Aggiorna stato in Redis KV (
scheduler:lastrun:<jobKey>) e su datahub (last_run_at,last_status). - Pubblica evento task su Redis.
Job asincroni e hook
Se un endpoint risponde con payload type=async + jobId, il job viene messo in pendingAsyncJobs e il completamento arriva da messaggi Redis type=job.done su pattern *.status.HOOK.
Autenticazione interna
Per le chiamate /internal/* lo scheduler usa la chiave privata per firmare JWT a breve TTL.
Per dettagli su issuer/audience/scope e verifica lato servizio target: