45 lines
1.0 KiB
JavaScript
45 lines
1.0 KiB
JavaScript
import process from 'process';
|
|
import { Queue } from 'bullmq';
|
|
import redisConfig from '../config/redis.js';
|
|
import logger from '../helpers/logger.js';
|
|
|
|
const CONNECTION_REFUSED = 'ECONNREFUSED';
|
|
|
|
const redisConnection = {
|
|
connection: redisConfig,
|
|
};
|
|
|
|
export const generateQueue = (queueName, options) => {
|
|
const queue = new Queue(queueName, redisConnection);
|
|
|
|
queue.on('error', (error) => queueOnError(error, queueName));
|
|
|
|
if (options?.runDaily) addScheduler(queueName, queue);
|
|
|
|
return queue;
|
|
};
|
|
|
|
const queueOnError = (error, queueName) => {
|
|
if (error.code === CONNECTION_REFUSED) {
|
|
const errorMessage =
|
|
'Make sure you have installed Redis and it is running.';
|
|
|
|
logger.error(errorMessage, error);
|
|
|
|
process.exit();
|
|
}
|
|
|
|
logger.error(`Error happened in ${queueName} queue!`, error);
|
|
};
|
|
|
|
const addScheduler = (queueName, queue) => {
|
|
const everydayAtOneOclock = '0 1 * * *';
|
|
|
|
queue.add(queueName, null, {
|
|
jobId: queueName,
|
|
repeat: {
|
|
pattern: everydayAtOneOclock,
|
|
},
|
|
});
|
|
};
|