0

我的项目使用了几个强制请求限制的 3rd 方 API。我的项目通过 Laravel Jobs 调用这些 api。我正在使用Spatie/aravel-rate-limited-job-middleware进行速率限制

提交项目后,平均会派出约 60 个工作岗位。这些作业需要执行为 1 Job/Minute

有一个 supervisord 程序正在运行默认队列的 2 个进程,并且--tries=3config/queue.php正在使用 redis'retry_after' => (60 * 15) 来避免在作业执行时重试。

我当前的速率限制器中间件是这样编码的

return (new RateLimited())
            ->allow(1)
            ->everySeconds(60)
            ->releaseAfterBackoff($this->attempts());

发生的情况是 3 分钟内处理了 3 个作业,但之后所有作业都失败了。

我能理解的是,所有作业每分钟都会重新排队,一旦它们超过尝试阈值 (3),它们就会被移动到 failed_jobs。

我尝试删除--tries标志,但没有奏效。我也尝试增加--tries=20,但 20 分钟后作业失败。我不想对--tries标志进行硬编码,因为在某些情况下可以分派超过 100 个工作。

我还想在主管中增加队列工作进程的数量,以便很少有作业可以并行执行。

我知道这是配置重试、超时标志的问题,但我不明白怎么做。需要帮忙...

4

0 回答 0