我正在寻找一种方法,允许我一次只允许每个用户运行一项作业。
这可以通过职位标签或其他方式。我想要的只是指定标签 User:1 并基于该范围一次仅为用户运行一项作业。一旦作业完成,它将允许该用户处理另一个作业。
这假设您有多个用于水平队列的进程。目前我的队列只有 1 个进程来完成这项工作,但我正在寻找方法来优化这一点,本质上每个用户都有一个进程。
这可能吗?
您可以使用 WithoutOverlapping 中间件并将用户 ID 指定为键。请注意,默认情况下安排重叠作业将触发作业重试,您可以快速耗尽重试次数。因此,如果您采用此策略,您应该自动拒绝队列中的新作业(例如不允许安排一个),或者不使用固定的重试计数,而是使用
retryUnitl
。如果您不想接受另一份工作,您可以使用唯一密钥代替。
您可以配置 Horizon 的自动缩放。