NodeJS 在bullmq中删除特定的可重复作业(带有作业ID)

ecbunoof  于 2023-04-05  发布在  Node.js
关注(0)|答案(3)|浏览(202)

我需要从队列中删除特定的单个作业。实际情况是我已经将一个作业添加到队列中,然后在一些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是job.id来自add的www.example.com。

rkttyhzu

rkttyhzu1#

据我所知,在将其添加到队列时,您需要指定相同的jobId

const job = await this.locationQueue.add('alert', { handle, author, data, jobId: 'some job unique job id'}, { repeat: { every: 60000 } });
2mbi3lxu

2mbi3lxu2#

当在队列中添加新作业时,您需要为您的情况指定jobId,正如@Ayzrian的回答所提到的那样。

但该jobId应该由您提供,而不是BullMQ为自己生成的jobId。

BullMQ生成的作业id是为了以后使用,当作业已经排队时。
在对可重复作业进行排队时提供的jobId应该与在删除相同的可重复作业时使用的jobId相同(沿着其他参数,如BullMQ文档中所述)。

rm5edbpk

rm5edbpk3#

首先,你需要使用指定的jobId创建你的作业:

await queue.add('job-name', user.id, {
  repeat: { every: 1000 },
  jobId: 'job-id',
});

然后你可以像这样通过结合作业名称,id和delay来删除它:

await queue.removeRepeatableByKey(
  'job-name:job-id::1000',
);

请注意,延迟后指定了2个冒号。

相关问题