Added redis and worker services
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
import { Queue, type Job } from 'bullmq';
|
||||
|
||||
import { redisConnection } from './redisConnection.js';
|
||||
|
||||
export type BirdMilestoneReminderJobData = {
|
||||
runDate: string;
|
||||
requestedBy: 'scheduler';
|
||||
};
|
||||
|
||||
export type BirdMilestoneReminderJobResult = {
|
||||
runDate: string;
|
||||
checked: number;
|
||||
sent: number;
|
||||
skipped: number;
|
||||
failed: number;
|
||||
};
|
||||
|
||||
export const birdMilestoneReminderQueueName = 'bird-milestone-reminders';
|
||||
|
||||
export const birdMilestoneReminderQueue = new Queue<BirdMilestoneReminderJobData, BirdMilestoneReminderJobResult>(
|
||||
birdMilestoneReminderQueueName,
|
||||
{
|
||||
connection: redisConnection,
|
||||
defaultJobOptions: {
|
||||
attempts: 3,
|
||||
backoff: {
|
||||
type: 'exponential',
|
||||
delay: 60_000,
|
||||
},
|
||||
removeOnComplete: 100,
|
||||
removeOnFail: 1_000,
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
export const enqueueBirdMilestoneReminderJob = (runDate: string): Promise<Job<BirdMilestoneReminderJobData, BirdMilestoneReminderJobResult>> =>
|
||||
birdMilestoneReminderQueue.add(
|
||||
'run-daily-reminders',
|
||||
{
|
||||
runDate,
|
||||
requestedBy: 'scheduler',
|
||||
},
|
||||
{
|
||||
jobId: `bird-milestone-reminders:${runDate}`,
|
||||
},
|
||||
);
|
||||
|
||||
export const closeBirdMilestoneReminderQueue = async () => {
|
||||
await birdMilestoneReminderQueue.close();
|
||||
};
|
||||
|
||||
export const getBirdMilestoneReminderQueueCounts = () =>
|
||||
birdMilestoneReminderQueue.getJobCounts('waiting', 'active', 'delayed', 'completed', 'failed');
|
||||
@@ -0,0 +1,19 @@
|
||||
import type { RedisOptions } from 'bullmq';
|
||||
|
||||
const redisUrl = process.env.REDIS_URL?.trim() || 'redis://localhost:6379';
|
||||
|
||||
const parseRedisConnection = (): RedisOptions => {
|
||||
const url = new URL(redisUrl);
|
||||
const db = url.pathname && url.pathname !== '/' ? Number(url.pathname.slice(1)) : undefined;
|
||||
|
||||
return {
|
||||
host: url.hostname,
|
||||
port: url.port ? Number(url.port) : 6379,
|
||||
username: url.username ? decodeURIComponent(url.username) : undefined,
|
||||
password: url.password ? decodeURIComponent(url.password) : undefined,
|
||||
db: Number.isFinite(db) ? db : undefined,
|
||||
maxRetriesPerRequest: null,
|
||||
};
|
||||
};
|
||||
|
||||
export const redisConnection = parseRedisConnection();
|
||||
Reference in New Issue
Block a user