Laravel:如何使用 Redis/数据库队列处理速率限制?

问题描述 投票:0回答:3

如何使用数据库/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); });
	
laravel redis queue mailtrap
3个回答
0
投票
team

订阅,那么您可以每 10 秒发送 25 封邮件,但这将花费您 24.99 美元


0
投票

数据库示例:使用两个工作人员处理十一个作业的作业队列,默认超时为 3

因此,这仅适用于两个工人,对于四个工人来说,它将因提前完成而失败。 我们需要增加尝试次数,因为在当前 10 秒限制内已用尽 3 次尝试。


0
投票

设置一些按键

$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; }

它将检查每秒的电子邮件是否超出允许的限制,它将保留队列,然后在定义的时间后释放它。

© www.soinside.com 2019 - 2024. All rights reserved.