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

3
export type QueueName = "mail" | "insights";
4

5
const queues = new Map<QueueName, Queue>();
6

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

20
export function getQueue(name: QueueName): Queue {
21
  if (!queues.has(name)) {
22
    queues.set(name, new Queue(name, defaultOpts));
23
  }
24

25
  return queues.get(name)!;
26
}
27

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