近期遇到laravel 8 中内置的api限流器给某些业务带来了困扰,比如:“程序执行进度”,“文件分块上传”、等等都需要频繁的去请求接口,整体的api单分钟60次并无法满足这些业务。然后尝试给api限流器增加班名单机制:

编辑App\Providers中的 RouteServiceProvider类:

修改configureRateLimiting方法:

1
2
3
4
5
6
7
8
9
10
protected function configureRateLimiting()
{
RateLimiter::for('api', function (Request $request) {
$routeName = \Illuminate\Support\Facades\Route::currentRouteName();
if (in_array($routeName, config('throttle.whitelist')) && onlineMember()->isLogin() ) {//白名单
return Limit::none();
}
return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip());
});
}

在目录config中新增一个配置文件throttle.php

1
2
3
4
5
6
<?php
return [
'whitelist' => [ //限流器白名单
'cloud.disk.upload.part'
]
];

修改需要给白名单的api路由名称:

1
Route::post('xx'xx')->name('cloud.disk.upload.part');