fix(api): boot tolérant à Redis injoignable
Si Redis n'est pas dispo au démarrage, registerWorker peut throw lors de l'instantiation BullMQ. On wrap dans try/catch et on log un warning — l'API HTTP démarre quand même, ce qui permet de tester l'app en dev même quand docker-compose n'est pas up. Les jobs ne tourneront pas tant que Redis n'est pas joignable + serveur restart.
This commit is contained in:
parent
94263c6447
commit
cfa302ce9a
@ -7,6 +7,11 @@
|
|||||||
| l'API HTTP (simple, suffisant tant que le volume reste petit). En prod
|
| 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).
|
| 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 app from '@adonisjs/core/services/app'
|
||||||
@ -15,22 +20,26 @@ import { registerWorker, shutdownQueue } from '#services/queue'
|
|||||||
import { sendRelanceJob } from '#jobs/send_relance_job'
|
import { sendRelanceJob } from '#jobs/send_relance_job'
|
||||||
import { sendCheckinJob } from '#jobs/send_checkin_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') {
|
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) => {
|
registerWorker<{ taskId: string; plain: string }>('checkins', async (job) => {
|
||||||
await sendRelanceJob(job.data)
|
await sendCheckinJob(job.data)
|
||||||
})
|
})
|
||||||
|
|
||||||
registerWorker<{ taskId: string; plain: string }>('checkins', async (job) => {
|
logger.info('BullMQ workers ready (relances, checkins)')
|
||||||
await sendCheckinJob(job.data)
|
|
||||||
})
|
|
||||||
|
|
||||||
app.terminating(async () => {
|
app.terminating(async () => {
|
||||||
logger.info('shutting down BullMQ workers')
|
logger.info('shutting down BullMQ workers')
|
||||||
await shutdownQueue()
|
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."
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user