eletrotupi / tcc/ api/src/lib/queue/QueueRegistry.tse11faebd227a1ab47246f3cf6d02d42cc42a6c8c
801 B | 35 lines Raw
1
import { Queue, QueueOptions } from "bullmq";
2

3
export type QueueName =
4
  | "mail"
5
  | "insights"
6
  | "medicine-reminders"
7
  | "daily-reminders"
8
  | "exports";
9

10
const queues = new Map<QueueName, Queue>();
11

12
const defaultOpts: QueueOptions = {
13
  connection: {
14
    host: process.env.VALKEY_HOST,
15
    port: Number(process.env.VALKEY_PORT),
16
  },
17
  defaultJobOptions: {
18
    attempts: 3,
19
    backoff: { type: "exponential", delay: 2000 },
20
    removeOnComplete: { count: 100 },
21
    removeOnFail: { count: 500 },
22
  },
23
};
24

25
export function getQueue(name: QueueName): Queue {
26
  if (!queues.has(name)) {
27
    queues.set(name, new Queue(name, defaultOpts));
28
  }
29

30
  return queues.get(name)!;
31
}
32

33
export async function closeAllQueues(): Promise<void> {
34
  await Promise.all([...queues.values()].map((q) => q.close()));
35
}