0

我目前正在开发一个应用程序,其中许多作业在后台运行,例如发送通知电子邮件。现在我需要对工作进行限速,以防止电子邮件服务提供商指责我们的帐户在几秒钟内发送了太多电子邮件。我的解决方案是使用Redisspatie job rate-limiterlaravel horizo​​n来管理排队的作业。

这是带有 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];
}

这是 Horizo​​n Queue Worker 配置:

'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时,它都会在 app log 上分派作业而不会出现问题worker.log。但是,在 Horizo​​n 仪表板上有 6 个失败的作业。看看这里的截图地平线仪表板

这是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请在下面评论并提前感谢。

4

0 回答 0