You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel自定义Rate Limiter如何设置任务释放延迟时间?

Laravel队列限流自定义释放时间方案

方法一:自定义RateLimitedWithRedis中间件

Laravel默认的RateLimitedWithRedis中间件触发限流时,任务会被快速放回队列。你可以通过继承并重写该中间件,自定义释放延迟:

  1. 创建自定义中间件:
<?php

namespace App\Queue\Middleware;

use Illuminate\Queue\Middleware\RateLimitedWithRedis as BaseRateLimitedWithRedis;

class RateLimitedWithRedis extends BaseRateLimitedWithRedis
{
    /**
     * 设置任务被限流后的释放延迟(秒)
     *
     * @return int
     */
    protected function delay()
    {
        return 5; // 改为你需要的5秒延迟
    }
}
  1. 在Job中替换为自定义中间件:
// Job类中
public function middleware(): array
{
    return [
        new \App\Queue\Middleware\RateLimitedWithRedis('google-sheets')
    ];
}

方法二:通过RateLimiter的then方法自定义逻辑

也可以在定义限流规则时,直接指定触发限流后的处理逻辑,手动设置释放延迟:

// AppServiceProvider中
RateLimiter::for('google-sheets', function (object $job) {
    return Limit::perMinute(20)->then(function () use ($job) {
        $job->release(5); // 释放5秒后重试
        return false;
    });
});

两种方式都能实现限流时任务延迟5秒再重试,避免短时间内大量任务频繁入队出队导致的RDS IOPS过载问题。


内容的提问来源于stack exchange,提问作者Adam Lambert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 14:46:01