我正在尝试实现Laravel 5.7的队列作业速率限制,当队列作业访问外部API时,这个API是有限的。
我的工作是:
public function handle() {
echo 'about to check throttling'.PHP_EOL;
Redis::throttle('throttle-test')->allow(10)->every(5)->then(function () {
// this is never executed
echo 'doing work'.PHP_EOL;
}, function () {
// also never executed
echo 'released back onto queue'.PHP_EOL;
return $this->release(10);
});
}除了"...application可以与Redis服务器交互“之外,没有提到需要在文档中使用Redis来处理队列、缓存或任何类似的内容。不管怎样,这是我的敌人:
DB_CONNECTION=mysql
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
REDIS_HOST=redis我已经确认RedisServiceProvider正在接收它所期望的正确配置:
array:3 [
"client" => "predis"
"default" => array:4 [
"host" => "redis"
"password" => null
"port" => "6379"
"database" => 0
]
"horizon" => array:5 [
"host" => "redis"
"password" => null
"port" => "6379"
"database" => 0
"options" => array:1 [
"prefix" => "horizon:"
]
]
]我很难理解为什么没有运行时错误,只是没有执行任何东西。如果我评论节流阀的东西,这工作运行良好,并做了它应该做的。,关于使用这种节流器的要求,我缺少什么?
发布于 2019-03-12 01:26:13
在这种情况下,Laravel的文档非常具有误导性。虽然这意味着您只需要连接到Redis,但实际上您必须对队列使用Redis。
发布于 2019-08-02 15:40:09
不幸的是,在不使用Redis队列驱动程序的情况下,没有“官方”方法来对限制队列进行评级。
我编写了自定义队列工作器mxl/laravel-队列-速率限制,它使用Illuminate\Cache\RateLimiter来限制作业执行(与Laravel到速率限制HTTP请求内部使用的相同)。
https://stackoverflow.com/questions/54936528
复制相似问题