3

我需要确保添加到队列中的相同作业在一定时间内不会重复。

是否值得D/M/Y-HH:M在我的唯一jobId字符串中包含部分时间戳(即),所以它仅在不在同一分钟内处理?

12:01如果一个工作被添加到另一个位置,它仍然会重复12:09- 或者 Bull 有更好的方法来做到这一点?

4

2 回答 2

2

Bull 旨在通过忽略使用现有作业 ID 添加的作业来支持幂等性。请注意不要启用诸如 之类的选项removeOnCompleted,因为该作业将在完成后被删除,并且不会在您下次添加作业时被考虑。

在您的情况下,如果您想确保在给定时间跨度内没有添加新工作,只需确保该时间戳期间的所有工作 ID 都相同,例如,您在评论中删除了 4 个最后一位数字您的 UNIX 时间戳。

于 2019-09-23T19:13:36.763 回答
0

我觉得您应该使用 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 项目应提供足够的数据,以便您可以找到您要查找的数据。

于 2019-01-25T09:24:21.423 回答