Jobs y Cache · infrastructure/jobs

Adapter listo para producción

BullMQ,
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.

queues.ts
 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_URLrequerida

    required for the jobs subsystem

  • JOBS_REDIS_URLopcional

    dedicated jobs Redis; falls back to REDIS_URL

Dónde vive

  • apps/server/src/infrastructure/jobs/queues.ts
  • apps/server/src/infrastructure/jobs/redis-connection.ts
  • apps/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.