adonisjs-jobs
Version:
Job processing for AdonisJS
28 lines (27 loc) • 975 B
JavaScript
import ClosureJob from './jobs/closure_job.js';
export class Dispatcher {
app;
constructor(app) {
this.app = app;
}
async dispatch(jobOrClosure, payload, options = {}) {
let isClosure = !(typeof jobOrClosure === 'function' && /^class\s/.test(jobOrClosure.toString()));
let job = isClosure ? ClosureJob : jobOrClosure;
payload = isClosure
? {
serializedClosure: jobOrClosure.toString(),
}
: payload;
// @ts-ignore
const config = this.app.config.get('jobs', {});
// @ts-ignore
const queues = await this.app.container.make('jobs.queues');
const queueName = options.queueName || config.queues[0];
const queue = queues[queueName];
if (!queue) {
throw new Error(`Queue ${queueName} not found`);
}
const bullmqJob = await queue.add(job.name, payload, options);
return bullmqJob.id;
}
}