|
|
@@ -32,7 +32,7 @@ class JobQueue { |
|
|
|
|
|
|
|
private constructor () {} |
|
|
|
|
|
|
|
init () { |
|
|
|
async init () { |
|
|
|
// Already initialized |
|
|
|
if (this.initialized === true) return |
|
|
|
this.initialized = true |
|
|
@@ -54,6 +54,8 @@ class JobQueue { |
|
|
|
}) |
|
|
|
this.jobQueue.watchStuckJobs(5000) |
|
|
|
|
|
|
|
await this.reactiveStuckJobs() |
|
|
|
|
|
|
|
for (const handlerName of Object.keys(handlers)) { |
|
|
|
this.jobQueue.process(handlerName, JOB_CONCURRENCY[handlerName], async (job, done) => { |
|
|
|
try { |
|
|
@@ -117,6 +119,31 @@ class JobQueue { |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
private reactiveStuckJobs () { |
|
|
|
const promises: Promise<any>[] = [] |
|
|
|
|
|
|
|
this.jobQueue.active((err, ids) => { |
|
|
|
if (err) throw err |
|
|
|
|
|
|
|
for (const id of ids) { |
|
|
|
kue.Job.get(id, (err, job) => { |
|
|
|
if (err) throw err |
|
|
|
|
|
|
|
const p = new Promise((res, rej) => { |
|
|
|
job.inactive(err => { |
|
|
|
if (err) return rej(err) |
|
|
|
return res() |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
promises.push(p) |
|
|
|
}) |
|
|
|
} |
|
|
|
}) |
|
|
|
|
|
|
|
return Promise.all(promises) |
|
|
|
} |
|
|
|
|
|
|
|
static get Instance () { |
|
|
|
return this.instance || (this.instance = new this()) |
|
|
|
} |
|
|
|