laravel - 作业总是在 laravel 作业失败 Redis 速率限制

标签 laravel redis laravel-5.6 laravel-horizon

这是后续 Laravel - Running Jobs in Sequence

我决定使用 Redis 速率限制。代码如下

jobClass {

  protected $subscription;

  public function __construct(Subscription$subscription) {
        $this->subscription= $subscription;
    }
  public function handle() {
    Redis::funnel('mailingJob')->limit(1)->then(function () {
            // Job logic...
            (new Mailer($this->subscription))->send();

        }, function () {
            // Could not obtain lock...
            return $this->release(10);
        });
  }
}

Controller 代码看起来像。

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Models\Subscriptions;
class MailController extends Controller
{


    public function sendEmail() {
        Subscriptions::all()
        ->each(function($subscription) {
            SendMailJob::dispatch($subscription);
        });
    }
}

现在,当我运行队列时,他们中的一些工作休息(大约 90%)失败并出现以下错误。

SendMailJob has been attempted too many times or run too long. The job may have previously timed out.

我错过了什么?请有人指导我正确的方向。

我的目标是一次只运行一种类型的一项作业。

最佳答案

[...] has been attempted too many times or run too long 是一个错误,不会告诉您作业失败的原因。这意味着 一些其他异常 导致您的作业在工作人员每次尝试时都失败,并且工作人员已经尝试了您的配置允许的最大次数。要了解它失败的原因,请检查您的 laravel.log 文件中是否存在导致作业失败的异常。

在您的情况下,由于 Mailer 正在联系外部系统,因此您连接的系统可能会限制您的速率,或者他们可能遇到临时连接问题或其他服务停机。同样,您的日志文件中应该有更多详细信息。

关于laravel - 作业总是在 laravel 作业失败 Redis 速率限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53013988/

相关文章:

php - 找不到 Laravel 5 类,使用命名空间

php - Laravel csrf 验证在单元测试期间失败(Laravel 4.1)

ruby-on-rails - 如何更改resque的默认 sleep 时间(5s)?

ruby-on-rails - Rails、Heroku 和 UTF-8 错误中的无效字节序列

redis - 使用RedisAPI的Vertx 3.7.0+-HMSET

excel - 如何在 laravel excel 版本 3 中添加列的标题和总和值?

php - Laravel - 读取配置变量

mysql - Lumen/Laravel 5.1 - 调用存储过程似乎提交事务

php - 使用 Laravel 将图像转换为 base 64 字符串

php - 不支持社交名流驱动程序 [VKontakte]