首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >限制不执行工作的Laravel队列速率

限制不执行工作的Laravel队列速率
EN

Stack Overflow用户
提问于 2019-03-01 01:02:55
回答 2查看 1.7K关注 0票数 9

我正在尝试实现Laravel 5.7的队列作业速率限制,当队列作业访问外部API时,这个API是有限的。

我的工作是:

代码语言:javascript
复制
    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来处理队列、缓存或任何类似的内容。不管怎样,这是我的敌人:

代码语言:javascript
复制
DB_CONNECTION=mysql
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
REDIS_HOST=redis

我已经确认RedisServiceProvider正在接收它所期望的正确配置:

代码语言:javascript
复制
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:"
    ]
  ]
]

我很难理解为什么没有运行时错误,只是没有执行任何东西。如果我评论节流阀的东西,这工作运行良好,并做了它应该做的。,关于使用这种节流器的要求,我缺少什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-12 01:26:13

在这种情况下,Laravel的文档非常具有误导性。虽然这意味着您只需要连接到Redis,但实际上您必须对队列使用Redis

票数 6
EN

Stack Overflow用户

发布于 2019-08-02 15:40:09

不幸的是,在不使用Redis队列驱动程序的情况下,没有“官方”方法来对限制队列进行评级。

我编写了自定义队列工作器mxl/laravel-队列-速率限制,它使用Illuminate\Cache\RateLimiter来限制作业执行(与Laravel到速率限制HTTP请求内部使用的相同)。

阅读更多关于在GitHub页面这就是答案上使用它的信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54936528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档