我的项目使用了几个强制请求限制的 3rd 方 API。我的项目通过 Laravel Jobs 调用这些 api。我正在使用Spatie/aravel-rate-limited-job-middleware进行速率限制
提交项目后,平均会派出约 60 个工作岗位。这些作业需要执行为 1 Job/Minute
有一个 supervisord 程序正在运行默认队列的 2 个进程,并且--tries=3
我config/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 个工作。
我还想在主管中增加队列工作进程的数量,以便很少有作业可以并行执行。
我知道这是配置重试、超时标志的问题,但我不明白怎么做。需要帮忙...