问题描述
我目前正在开发一个应用程序,其中有很多在后台运行的作业,例如发送通知电子邮件。现在我需要对作业进行速率限制,以防止电子邮件服务提供商指责我们的帐户在几秒钟内发送过多电子邮件。我的解决方案是使用 Redis、spatie job rate-limiter 和 laravel horizon 来管理排队作业。
这里是带有 spatie 作业速率限制器的试用提醒作业的示例处理方法。
public function handle()
{
$user = User::find($this->user->id);
$user->trial_reminder_sent = true;
$user->save();
if ($this->user->language) {
Mail::to($this->user)->locale($this->user->language)->send(new SendTrialReminder($this->user));
} else {
Mail::to($this->user)->send(new SendTrialReminder($this->user));
}
}
public function middleware()
{
$rateLimitedMiddleware = (new RateLimited())
->allow(5)
->everySeconds(10)
->releaseAfterSeconds(5)
->releaseAfterBackoff($this->attempts());
return [$rateLimitedMiddleware];
}
这是地平线队列工作器配置:
'local' => [
'supervisor-1' => [
'connection' => 'redis','queue' => [
'weekly_survey','notification','api','default'
],'balance' => 'auto','processes' => 6,'tries' => 5,// 10 seconds under the queue's retry_after to avoid overlap
'timeout' => (60 * 10) - 10,// Just under 10 min
],
和Redis配置:
'redis' => [
'driver' => 'redis','connection' => 'default','queue' => env('REdis_QUEUE','default'),'retry_after' => (60 * 10),'block_for' => null,],
现在,每次我触发 trial:reminder
命令 PHP artisan trial:reminder
时,它都会在应用日志 worker.log
上分派作业而不会出现问题。但是,在地平线仪表板上有 6 个失败的作业。看看这里的截图horizon dashboard
这是应用内 worker.log
文件中的结果。
[2021-04-29 03:45:19][7] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:19][7] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:19][12] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:19][12] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:19][17] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:20][17] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:20][24] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:20][24] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:19][8] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:19][8] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:19][10] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:19][10] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:19][11] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:19][11] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:19][14] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:19][14] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:19][18] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:19][18] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:19][20] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:20][20] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:20][22] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:20][22] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:20][25] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:20][25] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:20][28] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:20][28] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:20][31] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:20][31] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:19][4] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:19][3] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:19][2] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:19][6] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:19][6] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:19][9] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:19][9] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:19][13] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:19][13] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:19][15] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:19][15] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:19][16] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:19][16] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:19][19] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:19][19] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:19][21] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:20][21] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:20][23] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:20][23] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:20][26] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:20][26] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:20][27] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:20][27] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:20][29] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:20][29] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:20][30] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:20][30] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:19][1] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:19][5] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:22][3] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:22][2] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:22][1] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:22][5] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:22][4] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:35][11] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:35][11] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:35][25] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:35][25] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:35][29] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:35][29] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:35][24] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:35][24] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:35][20] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:35][20] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:35][15] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:35][16] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:35][9] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:35][9] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:35][7] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:35][7] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:35][23] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:35][23] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:35][26] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:35][26] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:35][22] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:35][22] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:35][13] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:35][13] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:35][12] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:35][12] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:35][14] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:35][14] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:35][8] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:35][8] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:35][19] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:35][19] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:35][10] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:35][10] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:35][31] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:35][31] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:35][28] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:35][28] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:35][27] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:35][27] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:35][30] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:35][30] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:35][21] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:35][21] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:35][6] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:35][18] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:35][17] Processing: App\Jobs\TrialReminder
[2021-04-29 03:45:37][16] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:37][15] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:37][17] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:37][18] Processed: App\Jobs\TrialReminder
[2021-04-29 03:45:37][6] Processed: App\Jobs\TrialReminder
[2021-04-29 03:46:10][31] Processing: App\Jobs\TrialReminder
[2021-04-29 03:46:10][29] Processing: App\Jobs\TrialReminder
[2021-04-29 03:46:10][28] Processing: App\Jobs\TrialReminder
[2021-04-29 03:46:10][23] Processing: App\Jobs\TrialReminder
[2021-04-29 03:46:10][25] Processing: App\Jobs\TrialReminder
[2021-04-29 03:46:11][24] Processing: App\Jobs\TrialReminder
[2021-04-29 03:46:11][24] Processed: App\Jobs\TrialReminder
[2021-04-29 03:46:11][20] Processing: App\Jobs\TrialReminder
[2021-04-29 03:46:11][20] Processed: App\Jobs\TrialReminder
[2021-04-29 03:46:10][11] Processing: App\Jobs\TrialReminder
[2021-04-29 03:46:11][11] Processed: App\Jobs\TrialReminder
[2021-04-29 03:46:11][27] Processing: App\Jobs\TrialReminder
[2021-04-29 03:46:11][27] Processed: App\Jobs\TrialReminder
[2021-04-29 03:46:11][26] Processing: App\Jobs\TrialReminder
[2021-04-29 03:46:11][26] Processed: App\Jobs\TrialReminder
[2021-04-29 03:46:11][13] Processing: App\Jobs\TrialReminder
[2021-04-29 03:46:11][13] Processed: App\Jobs\TrialReminder
[2021-04-29 03:46:11][30] Processing: App\Jobs\TrialReminder
[2021-04-29 03:46:11][30] Processed: App\Jobs\TrialReminder
[2021-04-29 03:46:11][9] Processing: App\Jobs\TrialReminder
[2021-04-29 03:46:11][9] Processed: App\Jobs\TrialReminder
[2021-04-29 03:46:11][12] Processing: App\Jobs\TrialReminder
[2021-04-29 03:46:11][12] Processed: App\Jobs\TrialReminder
[2021-04-29 03:46:11][14] Processing: App\Jobs\TrialReminder
[2021-04-29 03:46:11][14] Processed: App\Jobs\TrialReminder
[2021-04-29 03:46:11][8] Processing: App\Jobs\TrialReminder
[2021-04-29 03:46:11][8] Processed: App\Jobs\TrialReminder
[2021-04-29 03:46:11][19] Processing: App\Jobs\TrialReminder
[2021-04-29 03:46:11][19] Processed: App\Jobs\TrialReminder
[2021-04-29 03:46:11][21] Processing: App\Jobs\TrialReminder
[2021-04-29 03:46:11][21] Processed: App\Jobs\TrialReminder
[2021-04-29 03:46:11][10] Processing: App\Jobs\TrialReminder
[2021-04-29 03:46:11][10] Processed: App\Jobs\TrialReminder
[2021-04-29 03:46:11][7] Processing: App\Jobs\TrialReminder
[2021-04-29 03:46:11][7] Processed: App\Jobs\TrialReminder
[2021-04-29 03:46:11][22] Processing: App\Jobs\TrialReminder
[2021-04-29 03:46:11][22] Processed: App\Jobs\TrialReminder
[2021-04-29 03:46:12][31] Processed: App\Jobs\TrialReminder
[2021-04-29 03:46:13][28] Processed: App\Jobs\TrialReminder
[2021-04-29 03:46:12][23] Processed: App\Jobs\TrialReminder
[2021-04-29 03:46:12][29] Processed: App\Jobs\TrialReminder
[2021-04-29 03:46:12][25] Processed: App\Jobs\TrialReminder
[2021-04-29 03:47:26][13] Processing: App\Jobs\TrialReminder
[2021-04-29 03:47:26][11] Processing: App\Jobs\TrialReminder
[2021-04-29 03:47:26][24] Processing: App\Jobs\TrialReminder
[2021-04-29 03:47:26][24] Processed: App\Jobs\TrialReminder
[2021-04-29 03:47:26][20] Processing: App\Jobs\TrialReminder
[2021-04-29 03:47:26][20] Processed: App\Jobs\TrialReminder
[2021-04-29 03:47:26][10] Processing: App\Jobs\TrialReminder
[2021-04-29 03:47:26][10] Processed: App\Jobs\TrialReminder
[2021-04-29 03:47:26][26] Processing: App\Jobs\TrialReminder
[2021-04-29 03:47:26][26] Processed: App\Jobs\TrialReminder
[2021-04-29 03:47:26][14] Processing: App\Jobs\TrialReminder
[2021-04-29 03:47:26][14] Processed: App\Jobs\TrialReminder
[2021-04-29 03:47:26][8] Processing: App\Jobs\TrialReminder
[2021-04-29 03:47:26][8] Processed: App\Jobs\TrialReminder
[2021-04-29 03:47:26][22] Processing: App\Jobs\TrialReminder
[2021-04-29 03:47:26][22] Processed: App\Jobs\TrialReminder
[2021-04-29 03:47:26][19] Processing: App\Jobs\TrialReminder
[2021-04-29 03:47:26][19] Processed: App\Jobs\TrialReminder
[2021-04-29 03:47:26][21] Processing: App\Jobs\TrialReminder
[2021-04-29 03:47:26][21] Processed: App\Jobs\TrialReminder
[2021-04-29 03:47:26][7] Processing: App\Jobs\TrialReminder
[2021-04-29 03:47:26][7] Processed: App\Jobs\TrialReminder
[2021-04-29 03:47:26][12] Processing: App\Jobs\TrialReminder
[2021-04-29 03:47:26][12] Processed: App\Jobs\TrialReminder
[2021-04-29 03:47:26][9] Processing: App\Jobs\TrialReminder
[2021-04-29 03:47:26][27] Processing: App\Jobs\TrialReminder
[2021-04-29 03:47:26][30] Processing: App\Jobs\TrialReminder
[2021-04-29 03:47:28][13] Processed: App\Jobs\TrialReminder
[2021-04-29 03:47:28][9] Processed: App\Jobs\TrialReminder
[2021-04-29 03:47:28][11] Processed: App\Jobs\TrialReminder
[2021-04-29 03:47:28][30] Processed: App\Jobs\TrialReminder
[2021-04-29 03:47:28][27] Processed: App\Jobs\TrialReminder
[2021-04-29 03:50:01][26] Processing: App\Jobs\TrialReminder
[2021-04-29 03:50:01][12] Processing: App\Jobs\TrialReminder
[2021-04-29 03:50:01][8] Processing: App\Jobs\TrialReminder
[2021-04-29 03:50:01][14] Processing: App\Jobs\TrialReminder
[2021-04-29 03:50:01][24] Processing: App\Jobs\TrialReminder
[2021-04-29 03:50:02][19] Processing: App\Jobs\TrialReminder
[2021-04-29 03:50:02][19] Processed: App\Jobs\TrialReminder
[2021-04-29 03:50:02][21] Processing: App\Jobs\TrialReminder
[2021-04-29 03:50:02][21] Processed: App\Jobs\TrialReminder
[2021-04-29 03:50:02][22] Processing: App\Jobs\TrialReminder
[2021-04-29 03:50:02][22] Processed: App\Jobs\TrialReminder
[2021-04-29 03:50:02][20] Processing: App\Jobs\TrialReminder
[2021-04-29 03:50:02][20] Processed: App\Jobs\TrialReminder
[2021-04-29 03:50:02][7] Processing: App\Jobs\TrialReminder
[2021-04-29 03:50:02][7] Processed: App\Jobs\TrialReminder
[2021-04-29 03:50:02][10] Processing: App\Jobs\TrialReminder
[2021-04-29 03:50:02][10] Processed: App\Jobs\TrialReminder
[2021-04-29 03:50:04][24] Processed: App\Jobs\TrialReminder
[2021-04-29 03:50:03][26] Processed: App\Jobs\TrialReminder
[2021-04-29 03:50:03][14] Processed: App\Jobs\TrialReminder
[2021-04-29 03:50:04][12] Processed: App\Jobs\TrialReminder
[2021-04-29 03:50:04][8] Processed: App\Jobs\TrialReminder
[2021-04-29 03:55:17][21] Processing: App\Jobs\TrialReminder
[2021-04-29 03:55:17][22] Processing: App\Jobs\TrialReminder
[2021-04-29 03:55:17][10] Processing: App\Jobs\TrialReminder
[2021-04-29 03:55:17][20] Processing: App\Jobs\TrialReminder
[2021-04-29 03:55:17][7] Processing: App\Jobs\TrialReminder
[2021-04-29 03:55:17][19] Processing: App\Jobs\TrialReminder
我希望速率限制器作业处理 5 jobs every 10 seconds
,就像您在中间件函数中看到的那样,以便它可以发送 5 emails every 10 seconds
。有没有人给我提示指示工人发送 5 emails every 10 seconds
请在下面发表评论并提前致谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)