diff --git a/apps/api/start/queue.ts b/apps/api/start/queue.ts index a7d1803..87abefb 100644 --- a/apps/api/start/queue.ts +++ b/apps/api/start/queue.ts @@ -7,6 +7,11 @@ | l'API HTTP (simple, suffisant tant que le volume reste petit). En prod | K3s on les extraira dans un Deployment séparé (cf. backend.md §13.4). | +| Tolérance Redis : si Redis n'est pas joignable au boot, on log un +| warning et l'API HTTP démarre quand même. Les jobs ne tourneront pas +| mais le reste de l'app reste utilisable (utile en dev quand docker- +| compose n'est pas up). +| */ import app from '@adonisjs/core/services/app' @@ -15,22 +20,26 @@ import { registerWorker, shutdownQueue } from '#services/queue' import { sendRelanceJob } from '#jobs/send_relance_job' import { sendCheckinJob } from '#jobs/send_checkin_job' -// On enregistre les workers seulement quand l'app sert HTTP — pas en -// mode test (pour ne pas connecter Redis pendant les tests Japa) ni en -// REPL (pour ne pas déclencher d'exécution latérale). if (app.getEnvironment() === 'web') { - logger.info('booting BullMQ workers (relances, checkins)') + try { + registerWorker<{ taskId: string }>('relances', async (job) => { + await sendRelanceJob(job.data) + }) - registerWorker<{ taskId: string }>('relances', async (job) => { - await sendRelanceJob(job.data) - }) + registerWorker<{ taskId: string; plain: string }>('checkins', async (job) => { + await sendCheckinJob(job.data) + }) - registerWorker<{ taskId: string; plain: string }>('checkins', async (job) => { - await sendCheckinJob(job.data) - }) + logger.info('BullMQ workers ready (relances, checkins)') - app.terminating(async () => { - logger.info('shutting down BullMQ workers') - await shutdownQueue() - }) + app.terminating(async () => { + logger.info('shutting down BullMQ workers') + await shutdownQueue() + }) + } catch (err) { + logger.warn( + { err }, + "BullMQ workers couldn't start — Redis injoignable. L'API démarre quand même mais les jobs ne tourneront pas tant que Redis n'est pas up + serveur restart." + ) + } }