/* |-------------------------------------------------------------------------- | Queue workers |-------------------------------------------------------------------------- | | Boot des workers BullMQ. V1 : on les démarre dans le même process que | 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' import logger from '@adonisjs/core/services/logger' import { registerWorker, shutdownQueue } from '#services/queue' import { sendRelanceJob } from '#jobs/send_relance_job' import { sendCheckinJob } from '#jobs/send_checkin_job' import { sendPaymentThanksJob } from '#jobs/send_payment_thanks_job' if (app.getEnvironment() === 'web') { try { registerWorker<{ taskId: string }>('relances', async (job) => { await sendRelanceJob(job.data) }) registerWorker<{ taskId: string; plain: string }>('checkins', async (job) => { await sendCheckinJob(job.data) }) registerWorker<{ invoiceId: string }>('payment-thanks', async (job) => { await sendPaymentThanksJob(job.data) }) logger.info('BullMQ workers ready (relances, checkins, payment-thanks)') 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." ) } }