如何配置队列工作器、连接和限制器以避免作业失败

问题描述

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

提交一个项目后,平均分配约 60 个工作。这些作业需要作为 1 Job/Minute

执行

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

我当前的 Rate Limiter 中间件就是这样编码的

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

结果是在 3 分钟内处理了 3 个作业,但之后所有作业都失败了。

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

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

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

我知道这是配置重试、超时标志的问题,但我不明白如何。需要帮助...

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)