Jobs y Cache · infrastructure/jobs
Adapter listo para producciónBullMQ,
tipado y catalogado.
El trabajo real de un SaaS pasa fuera del path de la request. UseDeploy trae un setup de BullMQ con un catálogo de colas como única fuente de verdad, payloads de jobs tipados y las particularidades de la conexión ioredis que hacen tropezar a los setups armados a mano ya resueltas.
Un catálogo, payloads tipados
Las colas se declaran una sola vez en QUEUE_NAMES, así el bootstrap del worker y el montaje de Bull Board iteran una única fuente de verdad. Cada cola tiene una interfaz de payload tipada, así una key mal escrita aparece en tiempo de compilación en vez de en runtime dentro del worker.
1 export const QUEUE_NAMES = {
2 emails: 'emails',
3 webhooksOutgoing: 'webhooks-outgoing',
4 billingWebhooksRetry: 'billing-webhooks-retry',
5 accountDeletions: 'account-deletions',
6 dataExports: 'data-exports',
7 usagePeriodRollover: 'usage-period-rollover',
8 } as const;
Lo que viene listo
Conexión centralizada
createJobsConnection resuelve JOBS_REDIS_URL y luego REDIS_URL y aplica maxRetriesPerRequest: null — el setting que BullMQ exige para que los comandos bloqueantes nunca hagan timeout en medio de un poll.
Datos de job tipados
EmailJobData, DataExportJobData y compañía se comparten entre productores y consumidores, así que el drift de payload es un error de tipos.
Bull Board
Un dashboard montado te deja inspeccionar, reintentar y drenar colas en dev y en ops.
Guard de URL vacía
El resolver de URL hace trim antes de chequear, así un placeholder suelto JOBS_REDIS_URL= cae de nuevo a REDIS_URL en vez de dejar al worker en un loop de crashes.
Referencia de configuración
Variables de entorno
REDIS_URLrequeridarequired for the jobs subsystem
JOBS_REDIS_URLopcionaldedicated jobs Redis; falls back to REDIS_URL
Dónde vive
apps/server/src/infrastructure/jobs/queues.tsapps/server/src/infrastructure/jobs/redis-connection.tsapps/server/src/infrastructure/jobs/bull-board.ts
Sacá el trabajo lento del path de la request.
Arrancá con un catálogo de colas tipado, workers respaldados por Redis y un dashboard ya cableado.