adonis5-queue
Version:
Adonis JS 5 queue package based backed by Kue and Kue-scheduler
102 lines (101 loc) • 3.16 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const kue_scheduler_1 = __importDefault(require("kue-scheduler"));
const JobMaker_1 = __importDefault(require("./JobMaker"));
const JobRegister_1 = __importDefault(require("./JobRegister"));
// import { Queue } from '@ioc:Adonis5/Queue'
/**
* Main queue driver
*
* @version 2.0.0
* @adonis-version 4.0+
*/
class Queue {
/**
* Construct the queue
* @param {Adonis/App} app Adonis app/Ioc instance
*/
constructor(config, appRootPath) {
this.config = config;
this.appRootPath = appRootPath;
// initialize kue queue
this.queue = kue_scheduler_1.default.createQueue(this.config.connection);
// boost number of event listeners a queue instance can listen to
this.queue.setMaxListeners(0);
}
/**
* Register job event handlers
* @return {Promise}
*/
processing() {
const register = new JobRegister_1.default(this.config, this.appRootPath);
return register.setQueue(this.queue).listenForAppJobs();
}
/**
* Dispatch a new job
* @param {App/Jobs} job Job instances
* @return {Void}
*/
dispatch(job, when = 'now') {
// create a job maker factory
const maker = new JobMaker_1.default();
// get the kue job converted from app job
const result = maker.setAppJob(job).setQueue(this.queue).process();
// schedule the job in the queue
if (when === 'now') {
// immediate job
this.queue.now(result.kueJob);
}
else if (when.includes('every') || when.includes('*')) {
when = when.replace('every ', '');
// cron or repeating job
this.queue.every(when, result.kueJob);
}
else {
// schedule a job
this.queue.schedule(when, result.kueJob);
}
return result;
}
/**
* Remove a job from queue
* @param {App/Job} job Job producer
* @return {Promise<Response>}
*/
remove(job) {
return new Promise((resolve, reject) => {
this.queue.removeJob(job.kueJob.id, (error, response) => {
if (error) {
reject(error);
}
else {
// send the onRemove event
if (job['onRemove']) {
job['onRemove'](job.job.type);
}
resolve(response);
}
});
});
}
/**
* Clear all jobs within a queue for a clean start
* @return {Promise<Response>}
*/
clear() {
return new Promise((resolve, reject) => {
this.queue.clear((error, response) => {
if (error) {
reject(error);
}
else {
resolve(response);
}
});
});
}
}
exports.default = Queue;