【问题标题】:Laravel Jobs fail on Redis when attempting to use throttle尝试使用油门时,Laravel 作业在 Redis 上失败
【发布时间】:2018-10-04 13:21:46
【问题描述】:

最终目标

我的应用程序的目标是向 Redis 队列发送潜在的大量电子邮件(该位正在工作),然后 Redis 将这些邮件的处理限制为每选定的分钟数只处理一组电子邮件。

对于本示例,我有一个将时间附加到文件的测试作业,我试图将其限制为每 60 秒一次。

到目前为止的故事......

到目前为止,我的应用程序已成功将 50 个测试作业量推送到 Redis 队列。我可以登录到 Horizo​​n 并在“processjob”队列中看到这 50 个作业。我也可以登录redis-cli,在list键“queues:processjob”下看到50个集合。

我的问题是,一旦我尝试打开油门,只有 1 个作业运行,其余作业失败并出现以下错误:

Predis\Response\ServerException: ERR Error running script (call to f_29cc07bd431ccbf64637e5dcb60484560fdfa2da): @user_script:10: WRONGTYPE 针对在 /var/www/html/smhub/vendor/predis/predis 中持有错误类型值的键进行操作/src/Client.php:370

如果我移除油门,所有工作文件和 5 个作业都会立即运行。

我认为这可能是不正确的键名,但如果我更改以下内容:

    public function handle()
{
    //
    Redis::throttle('queues:processjob')->allow(1)->every(60)->then(function(){

      Storage::disk('local')->append('testFile.txt',date("Y-m-d H:i:s"));
    }, function (){
      return $this->release(10);
    });
}

到这里:

    public function handle()
{
    //
    Redis::funnel('queues:processjob')->limit(1)->then(function(){

      Storage::disk('local')->append('testFile.txt',date("Y-m-d H:i:s"));
    }, function (){
      return $this->release(10);
    });
}

然后一切正常。

我的想法...

有些事情告诉我,问题在于 redis 键的类型是“列表”,并且作业都在一个列表下。话虽如此,如果它不能以这种方式工作,我们将如何限制队列,因为限制需要唯一的键。

【问题讨论】:

    标签: laravel redis laravel-5.5 throttling


    【解决方案1】:

    对于在尝试使其正常工作时遇到问题并且遇到与我相同的问题的其他任何人,这就是解决我的问题的方法:

    错误

    我认为Redis::throttle('queues:processjob') 是指您想要限制的队列。然而,在重新阅读文档和测试代码之后,我意识到事实并非如此。

    修复

    Redis::throttle('queues:processjob') 旨在指向它自己的“持有”队列,因此必须是唯一的 Redis 键名。因此,将其更改为 Redis::throttle('throttle:queues:processjob') 对我来说效果很好。

    工作原理

    当我第一次看到这个时,我认为Redis::throttle('this') 限制了您指定的队列。在某种程度上这是正确的,但如果工作是通过其他方式创建的,则它将不起作用。

    Redis::throttle('this') 实际上创建了一个新的“保留”队列,作业将在其中运行,直到满足您指定的条件。因此,在此示例中,作业将进入队列“this”,当释放油门触发器时,它们将被传递到其执行代码中指定的队列。在这种情况下,'queues:processjob'。

    我希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2020-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-04
      • 2019-03-16
      • 1970-01-01
      • 2015-08-27
      • 2017-12-23
      相关资源
      最近更新 更多