如何使用数据库/Redis 连接设置 Laravel 队列,以便在“每 10 秒五封电子邮件”的 Mailtrap 速率限制下作业不会失败?例如,我尝试使用 Redis 用两个工作人员执行六个作业。 但第 6 个作业失败,失败作业表中出现以下错误。
每秒电子邮件太多。
Redis::throttle('key')->allow(5)->every(10)->then(function () { $email = new WelcomeEmail(); Mail::to('[email protected]')->send($email); }, function () { return $this->release(7); });
订阅,那么您可以每 10 秒发送 25 封邮件,但这将花费您 24.99 美元
设置一些按键
$key = 'email_rate_limit';
$perSecond = 1;
$emailsPerSecond = env('EMAILS_PER_SECOND', 50);
然后使用油门检查是否通过或失败,在两种情况下都进行必要的操作
if (!Redis::throttle($key)->allow($emailsPerSecond)->every($perSecond)->then(function () {
return true;
})) {
Log::info('Email rate limit exceeded');
$this->release($perSecond+1);
return $this;
}
它将检查每秒的电子邮件是否超出允许的限制,它将保留队列,然后在定义的时间后释放它。