我需要确保添加到队列中的相同作业在一段时间内不会重复。
是否值得在我的唯一D/M/Y-HH:M
字符串中包含部分时间戳(即jobId
),因此仅当不在同一分钟内时才会处理?
如果在12:01
添加了一个作业而在12:09
添加了另一个作业,它仍然会重复 - 或者Bull有更好的方法吗?
答案 0 :(得分:1)
Bull旨在通过忽略添加有现有作业ID的作业来支持幂等。请注意不要启用诸如removeOnCompleted
之类的选项,因为该作业将在完成后被删除,并且在下次添加作业时不会被考虑。
在您的情况下,要确保在给定时间段内未添加任何新作业,只需确保该时间戳记内的所有作业ID都相同,例如您在注释中写的删除了4个UNIX时间戳的最后一位。
答案 1 :(得分:0)
我觉得您应该使用Bull的API检查作业是否正在运行,然后决定是否将作业添加到队列中(在生产者上进行修补)。
您还可以决定在运行作业时(在流程功能内部)检查是否已经在运行类似的作业,并尽早返回而不是执行该作业(对使用者进行修补)。
您可以使用Queue getJobs函数执行此操作:
getJobs(types: string[], start?: number, end?: number, asc?: boolean):Promise<Job[]>
"Returns a promise that will return an array of job instances of the given types. Optional parameters for range and ordering are provided."
从文档中: https://github.com/OptimalBits/bull/blob/develop/REFERENCE.md#queuegetjobs
“作业”项应提供足够的数据,以便您可以找到所需的数据。