Jobs e Cache · infrastructure/jobs

Adapter pronto para produção

BullMQ,
tipado e catalogado.

O trabalho real de um SaaS acontece fora do caminho da request. A UseDeploy entrega um setup de BullMQ com um catálogo de filas como única fonte de verdade, payloads de job tipados e as peculiaridades da conexão ioredis que derrubam setups feitos na mão já resolvidas.

Um catálogo, payloads tipados

As filas são declaradas uma única vez em QUEUE_NAMES, então o bootstrap do worker e o mount do Bull Board iteram uma única fonte de verdade. Cada fila tem uma interface de payload tipada, então uma key com nome errado aparece em tempo de compilação em vez de em runtime dentro do 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;

O que vem pronto

Conexão centralizada

createJobsConnection resolve JOBS_REDIS_URL e depois REDIS_URL e aplica maxRetriesPerRequest: null — o setting que o BullMQ exige para que comandos bloqueantes nunca deem timeout no meio de um poll.

Dados de job tipados

EmailJobData, DataExportJobData e companhia são compartilhados entre produtores e consumidores, então drift de payload é um erro de tipo.

Bull Board

Um dashboard montado deixa você inspecionar, reprocessar e drenar filas em dev e em ops.

Guard de URL vazia

O resolver de URL faz trim antes de checar, então um placeholder solto JOBS_REDIS_URL= cai de volta para REDIS_URL em vez de deixar o worker em loop de crash.

Referência de configuração

Variáveis de ambiente

  • REDIS_URLobrigatória

    required for the jobs subsystem

  • JOBS_REDIS_URLopcional

    dedicated jobs Redis; falls back to REDIS_URL

Onde ele vive

  • apps/server/src/infrastructure/jobs/queues.ts
  • apps/server/src/infrastructure/jobs/redis-connection.ts
  • apps/server/src/infrastructure/jobs/bull-board.ts

Tire o trabalho lento do caminho da request.

Comece com um catálogo de filas tipado, workers apoiados no Redis e um dashboard já conectado.