GVKun编程网logo

使用 redis + horizon 时,laravel 限速作业的工作原理(redis限速器)

16

在这篇文章中,我们将带领您了解使用redis+horizon时,laravel限速作业的工作原理的全貌,包括redis限速器的相关情况。同时,我们还将为您介绍有关Laravel-分派作业时出现Redi

在这篇文章中,我们将带领您了解使用 redis + horizon 时,laravel 限速作业的工作原理的全貌,包括redis限速器的相关情况。同时,我们还将为您介绍有关Laravel - 分派作业时出现 Redis 错误、Laravel Homestead Redis缓存无法正常工作、Laravel Horizon 配置以及使用、Laravel Horizon是什么?有啥用?的知识,以帮助您更好地理解这个主题。

本文目录一览:

使用 redis + horizon 时,laravel 限速作业的工作原理(redis限速器)

使用 redis + horizon 时,laravel 限速作业的工作原理(redis限速器)

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

我目前正在开发一个应用程序,其中有很多在后台运行的作业,例如发送通知电子邮件。现在我需要对作业进行速率限制,以防止电子邮件服务提供商指责我们的帐户在几秒钟内发送过多电子邮件。我的解决方案是使用 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 (将#修改为@)

Laravel - 分派作业时出现 Redis 错误

Laravel - 分派作业时出现 Redis 错误

如何解决Laravel - 分派作业时出现 Redis 错误?

在我负责的其中一个系统上,有时由于 Redis 的连接问题,一些作业没有被调度,这最终会向用户返回一个错误,在我们这边,我们可以忽略这个错误,并且只是想念这份工作,我在 Google 上寻找如何处理它,但没有找到任何相关信息。

public function sendMessage(Request $request,Model $model)
{
    // Do the necessary stuff
    
    ResolveMessageBilling::dispatch($model,$request->all());

    return response()->json([
        ''message'' => ''The message was succesfully sent''
    ],200);
}

这是我们得到的错误:RedisException - socket error on read socket

如果发生错误如何忽略?一个简单的 try/catch 可以解决问题吗?

public function sendMessage(Request $request,Model $model)
{
    // Do the necessary stuff

    try {
        ResolveMessageBilling::dispatch($model,$request->all());
    } catch(\Exception $e) {}

    return response()->json([
        ''message'' => ''The message was succesfully sent''
    ],200);
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

Laravel Homestead Redis缓存无法正常工作

Laravel Homestead Redis缓存无法正常工作

如何解决Laravel Homestead Redis缓存无法正常工作?

Laravel 7 homestead redis缓存现在出现问题。这是.env

CACHE_DRIVER=redis
REdis_HOST=127.0.0.1
REdis_PASSWORD=null
REdis_PORT=6379

缓存代码

$cache_key = $key.''_home_random''; //I pass the key
$expiresAt = Now()->addHours(24);
$posts = Post::where($where)->inRandomOrder()->paginate(3);
Cache::add($cache_key,$posts,$expiresAt);
//tried Cache::put too

检查数据是否在缓存中

if (Cache::has(''books_category_home_random''))
    {
        echo ''yes<br>'';
        $value = Cache::get(''books_category_home_random'');
        print_r($value);
    }

我可以正确打印数据。我使用redis-cli monitor,控制台中已经存在缓存,但是缓存中不显示页面,并且数据不断变化。在注释掉缓存过程后检查缓存时,我发现没有缓存,因此它缓存了数据,然后当我重新加载页面缓存时,它被删除并被新数据覆盖。这是什么问题,为什么在我指定的时间段内未保存缓存?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

Laravel Horizon 配置以及使用

Laravel Horizon 配置以及使用

导语

Horizon 为 Laravel 提供了基于 Redis 的、拥有美观后台的、代码驱动配置的队列系统。Horizon 让我们可以轻松监控队列系统的关键指标,例如任务吞吐量、运行时间和失败任务等。

Laravel Horizon 是官方的扩展包,配置以及使用很简单,跟着文档就可以。

安装以及配置

  1. composer require laravel/horizon
  2. 安装好之后,发布资源 php artisan vendor:publish --provider="Laravel\Horizon\HorizonServiceProvider"
  3. 配置文件在 config/horizon.php,可以根据需求修改

使用

  1. 运行 php artisan horizon
  2. 访问 you_site.com/horizon 就可以看到后台了
  3. 还有其他命令

    1. 暂停 php artisan horizon:pause
    2. 继续 php artisan horizon:continue
    3. 执行完所有任务后退出 php artisan horizon:terminate

部署

可以看到使用很简单,在部署的时候要注意以下几点

  1. 确保有 failed_jobs 数据表,相关文档可以看这里
  2. 默认情况下,只能在 local 访问,当然我们可以自定义

    1. 首先修改 config/horizon.phpenvironments 配置项。可以看到其中有 localproduction,将 production 修改为线上 .envAPP_ENV 的值
    2. 接下来可以自定义后台的访问策略,使用 Horizon:auth 方法,return true 即可访问,否则返回 403。在 app/Providers/AppServiceProvider.php 中修改如下
public function boot()
{
    Horizon::auth(function ($request) {
        // 这里进行判断,根据需求自行选择

        // 通过认证可以访问
        if (Auth::check()) {
            return true;
        }

        // 指定参数可以访问
        if ($request->input(''q'') == ''horizon'') {
            return true;
        }

    });
}
  1. 使用 Supervisor 进程守护,如果是使用 Laradock,可以使用 php-worker 或者 laravel-horizon 容器。配置如下,根据情况进行修改(可以参考这两篇文章,这里,那里)
[program:horizon]
process_name=%(program_name)s
command=php /var/www/you_project_path/artisan horizon
autostart=true
autorestart=true
user=laradock
redirect_stderr=true
stdout_logfile=/var/www/you_project_path/horizon.log
  1. 使用调度任务来生成监控,以便查看运行情况,在 app/Console/Kernel.php 修改如下
protected function schedule(Schedule $schedule)
{
    // $schedule->command(''inspire'')
    //          ->hourly();
    $schedule->command(''horizon:snapshot'')->everyFiveMinutes();
}

结语

Laravel Horizon 还有标签以及通知的配置,感兴趣的可以查看文档。


参考资料:官方扩展包 —— 队列系统解决方案:Laravel Horizon。

Laravel Horizon是什么?有啥用?

Laravel Horizon是什么?有啥用?

下面由laravel/" target="_blank">laravel教程栏目给大家介绍介绍 laravel horizon,希望对需要的朋友有所帮助!

介绍 Laravel Horizon

今天我得意的宣布 Laravel Horizon, 它为 Laravel Redis 队列提供了精美的仪表盘和代码驱动的配置系统。

除了全新的代码驱动配置系统, Horizon 还有美丽的仪表盘 UI, 它完全开源,对整个 Laravel 社区都是免费的,我们明天发布测试版本,我希望你会喜欢它。

译者注: 截止 2019 年 10 月,Horizon 已经发布了 3.4.1 版本

仪表盘

731e0947e59f78cdac2cce6515c8c67.png
Horizon 仪表板是一个漂亮的单页 Vue 应用程序,可通过简单的composer require laravel / horizon直接安装到现有应用程序中。 它提供对队列工作负载,最近的作业,失败的作业,作业重试,吞吐量和运行时指标以及进程计数的实时洞察。 通过Horizon :: auth注册的简单回调控制仪表板的身份验证,从而使您可以完全控制对仪表板的访问。

配置

Horizon 是配置 Laravel 队列的绝佳新方法。 与 Laravel 的调度程序类似,所有队列工作者都可以通过代码配置:

在您的代码中拥有此配置意味着这一切都在源代码控制之下,从而使您的团队可以轻松地进行协作。在config/horizon.php文件中,我们配置要创建的进程数量、需要处理的队列、队列超时时间以及需要传递给 queue:work Artisan 命令的其他任何设置 。

然后,要启动所有的队列工作者,只需要一个简单的命令:php artisan horizon。 不需要其他命令行选项。 该命令将读取 Horizon 配置并配置所有必需的工作进程。

将 Horizon 安装并部署到生产环境后,您可以通过修改配置文件并重新部署来修改整个队列工作者的配置。

失败的任务

Horizon 提供了清晰详细的界面,用于检查和重试失败的任务(是的,我们都有)。 您可以查看该任务的异常堆栈跟踪,标签和最近重试记录。 将失败的任务详细信息直接在页面上显示真是太好了。 由于重试是链接到失败的原始任务,因此您不再需要盲目地尝试在控制台输入queue:retry并确定其重试是成功完成还是再次失败:

标签监控

Horizon 允许您为任务分配标签,包括 Email、Broadcasts、Notifications 和Queued Listeners。 实际上,Horizon 会根据附加到队列的 Eloquent Model 智能地给大多数任务打上标签。

您可以通过这些标签轻松地搜索到队列任务,从而查看特定的客户任务或者程序中的其他队列任务。 此功能使您可以快速关注高价值客户,或为刚提交支持工单的客户找到失败的任务:

平衡

Horizon 可以根据队列的工作负载自动平衡队列中的队列工作进程。 例如,如果default 队列为空,但notifications队列中充满了队列任务,则 Horizon 可以自动将notifications的任务分配到default队列中,以帮助快速处理这些任务。

队列赶上后,Horizon 将确保在所有队列中公平地重新分配任务。

指标图表

Horizon 提供吞吐量和平均运行时间图表,使您可以查看单个任务或整个队列的吞吐量和运行时间趋势。 这些指标快照是使用horizon:snapshot命令捕获的,可以使用 Laravel 内置的任务调度将其设置为每分钟运行一次。 这使您可以快速发现部署后的性能下降。

通知

当您的某个队列达到一定负荷时,Horizon 会同时发送 Slack 和 SMS 通知。 您可以轻松配置等待时间阈值以确定何时发送通知。 这意味着您始终知道何时队列需要更多的处理进程。 收到通知后,Horizon 的代码驱动配置使您可以快速进行配置更改以增加更多处理进程。

结论 & 感谢

我要特别感谢Mohamed Said,David Hemphill和Steve Schoger,他们都为 Horizon 的设计和开发做出了贡献。 Steve 设计了用户界面,David Hemphill 将其作为 Vue 应用程序实现了接口,Mohamed 将前端连接到了我实现的 Horizon 后端。

以上就是Laravel Horizon是什么?有啥用?的详细内容,更多请关注php中文网其它相关文章!

我们今天的关于使用 redis + horizon 时,laravel 限速作业的工作原理redis限速器的分享已经告一段落,感谢您的关注,如果您想了解更多关于Laravel - 分派作业时出现 Redis 错误、Laravel Homestead Redis缓存无法正常工作、Laravel Horizon 配置以及使用、Laravel Horizon是什么?有啥用?的相关信息,请在本站查询。

本文标签: