我需要确保添加到队列中的相同作业在一定时间内不会重复。
是否值得D/M/Y-HH:M
在我的唯一jobId
字符串中包含部分时间戳(即),所以它仅在不在同一分钟内处理?
12:01
如果一个工作被添加到另一个位置,它仍然会重复12:09
- 或者 Bull 有更好的方法来做到这一点?
我需要确保添加到队列中的相同作业在一定时间内不会重复。
是否值得D/M/Y-HH:M
在我的唯一jobId
字符串中包含部分时间戳(即),所以它仅在不在同一分钟内处理?
12:01
如果一个工作被添加到另一个位置,它仍然会重复12:09
- 或者 Bull 有更好的方法来做到这一点?
Bull 旨在通过忽略使用现有作业 ID 添加的作业来支持幂等性。请注意不要启用诸如 之类的选项removeOnCompleted
,因为该作业将在完成后被删除,并且不会在您下次添加作业时被考虑。
在您的情况下,如果您想确保在给定时间跨度内没有添加新工作,只需确保该时间戳期间的所有工作 ID 都相同,例如,您在评论中删除了 4 个最后一位数字您的 UNIX 时间戳。
我觉得您应该使用 Bull 的 API 来检查作业是否正在运行,然后您决定是否将作业添加到队列中(如果没有(生产者上的补丁))。
您还可以决定在运行作业时(在 process 函数内)检查类似的作业是否已经在运行,并提前返回而不是执行作业(消费者补丁)。
您可以使用 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
Job 项目应提供足够的数据,以便您可以找到您要查找的数据。