+ connection: Redis.getRedisClientOptions('Worker'),
+ maxStalledCount: 10
+ }
+
+ const handler = function (job: Job) {
+ const timeout = JOB_TTL[handlerName]
+ const p = handlers[handlerName](job)
+
+ if (!timeout) return p
+
+ return timeoutPromise(p, timeout)
+ }
+
+ const processor = async (jobArg: Job<any>) => {
+ const job = await Hooks.wrapObject(jobArg, 'filter:job-queue.process.params', { type: handlerName })
+
+ return Hooks.wrapPromiseFun(handler, job, 'filter:job-queue.process.result')
+ }
+
+ const worker = new Worker(handlerName, processor, workerOptions)
+
+ worker.on('failed', (job, err) => {
+ const logLevel = silentFailure.has(handlerName)
+ ? 'debug'
+ : 'error'
+
+ logger.log(logLevel, 'Cannot execute job %s in queue %s.', job.id, handlerName, { payload: job.data, err })
+
+ if (errorHandlers[job.name]) {
+ errorHandlers[job.name](job, err)
+ .catch(err => logger.error('Cannot run error handler for job failure %d in queue %s.', job.id, handlerName, { err }))