Laravel Horizon:每个用户一个并发作业

问题描述 投票:0回答:1

我正在寻找一种方法,允许我一次只允许每个用户运行一项作业。

这可以通过职位标签或其他方式。我想要的只是指定标签 User:1 并基于该范围一次仅为用户运行一项作业。一旦作业完成,它将允许该用户处理另一个作业。

这假设您有多个用于水平队列的进程。目前我的队列只有 1 个进程来完成这项工作,但我正在寻找方法来优化这一点,本质上每个用户都有一个进程。

这可能吗?

laravel laravel-queue laravel-horizon
1个回答
0
投票

您可以使用 WithoutOverlapping 中间件并将用户 ID 指定为键。请注意,默认情况下安排重叠作业将触发作业重试,您可以快速耗尽重试次数。因此,如果您采用此策略,您应该自动拒绝队列中的新作业(例如不允许安排一个),或者不使用固定的重试计数,而是使用

retryUnitl
。如果您不想接受另一份工作,您可以使用唯一密钥代替。

您可以配置 Horizon 的自动缩放。

© www.soinside.com 2019 - 2024. All rights reserved.