我需要从队列中删除特定的单个作业。 实际情况是,我已经将一个作业添加到队列中,然后在某个 API 调用中,我需要从队列中删除该单个作业。 所以,以后不会再重复了。
加:
const job = await this.locationQueue.add('alert', { handle, author, data }, { repeat: { every: 60000 } });
删除:
await this.locationQueue.removeRepeatable('alert', { jobId: request.jobKey, every: 60000 });
其中 request.jobKey 是从 add job.id 的。
首先,您需要使用指定的jobId
创建作业:
await queue.add('job-name', user.id, {
repeat: { every: 1000 },
jobId: 'job-id',
});
然后你可以通过组合作业名称、id 和延迟来像这样删除它:
await queue.removeRepeatableByKey(
'job-name:job-id::1000',
);
请注意,延迟后指定了 2 个冒号。
据我所知,在将其添加到队列时,您需要指定相同的jobId
。
const job = await this.locationQueue.add('alert', { handle, author, data, jobId: 'some job unique job id'}, { repeat: { every: 60000 } });
在队列中添加新作业时,您需要为您的情况指定一个jobId
,如 @Ayzrian 的回答所述。
但是这个jobId应该由你提供,而不是BullMQ为自己生成的那个。
BullMQ生成的作业的 id 供以后在作业已排队时使用。
在对可重复作业进行排队时提供的 jobId 应与您在删除相同的可重复作业时使用的 jobId 相同(以及其他参数,如 BullMQ 文档中所述)。