微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 redis + horizo​​n 时,laravel 限速作业的工作原理

如何解决使用 redis + horizo​​n 时,laravel 限速作业的工作原理

我目前正在开发一个应用程序,其中有很多在后台运行的作业,例如发送通知电子邮件。现在我需要对作业进行速率限制,以防止电子邮件服务提供商指责我们的帐户在几秒钟内发送过多电子邮件。我的解决方案是使用 Redisspatie job rate-limiterlaravel 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 举报,一经查实,本站将立刻删除。