Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel队列速率限制不执行工作_Php_Laravel_Laravel Queue - Fatal编程技术网

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

Php Laravel队列速率限制不执行工作,php,laravel,laravel-queue,Php,Laravel,Laravel Queue,我正在尝试实现当队列作业遇到速率受限的外部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

我正在尝试实现当队列作业遇到速率受限的外部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);
        });
    }
除了“…应用程序可以与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:"
    ]
  ]
]

我很难理解为什么没有运行时错误,只是什么都没有执行。如果我把节流阀的东西注释掉,工作就会正常运行,并完成它应该做的事情关于使用此节流的要求,我遗漏了什么?

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

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

我编写了自定义队列工作程序,它使用
illighted\Cache\RateLimiter
对作业执行进行分级限制(与Laravel to内部使用的相同)


阅读更多关于其在或中使用的信息。

检查
存储/logs/laravel.log
最后一行,队列通常以静默方式失败,但在发生错误时写入日志。检查
存储/loogs/laravel.log
最后一行,队列通常以静默方式失败,但在发生错误时写入日志。在laravel文档中,它说
速率限制。此功能要求您的应用程序可以与Redis服务器交互。
因此,由于您使用的是
QUEUE\u DRIVER=sync
,您的队列永远不会被Redis处理,因此它永远不会被执行。速率限制是REDIS独有的功能。
与REDIS服务器交互
使用REDIS作为队列
是两件不同的事情。我认为,如果需要将Redis用作队列,它会指定一个队列。我已确认Redis商店信息已正确传递给
RedisServiceProvider
您是否尝试将
Redis
用作
.env
文件中的队列驱动程序?否!如果使用速率限制器,则不需要在队列中使用redis。这个答案不正确!