这是对 Laravel 的后续 - 按顺序运行作业
我决定使用 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);
});
}
}
控制器代码看起来像。
<?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 尝试次数过多或运行时间过长。该作业之前可能已超时。
我错过了什么?请有人引导我走向正确的方向。
我的目标是一次只运行一个类型的作业。