IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 使用 Laravel Horizon 优雅的终止进程(1) -> 正文阅读

[PHP知识库]使用 Laravel Horizon 优雅的终止进程(1)

抛出问题

我们发布新版本代码时,如果优雅的终止运行中的异步任务,规避异步任务运行到一半被kill掉的情况。

解决办法

通过调研之后发现,laravel 的 horizon 扩展可以解决这个问题,使用下面的命令可以优雅的结束进程:

  1. 确保进行中进程不会被kill掉,执行结束后才允许被kill;
  2. 非进行的任务等候,不会加入到队列中;

优雅的解决了这个问题,思路就是这么的朴实无华。

php artisan horizon:terminate

下面开始隆重介绍 Horizon

简介

Horizon 提供了一个漂亮的仪表盘,可以通过代码配置 Laravel Redis 队列,同时它允许你轻易的监控你的队列系统中诸如任务吞吐量,运行时间和失败任务等关键指标。

在这里插入图片描述
在这里插入图片描述

安装

注意:确保 queue 配置文件中设置了 redis 队列驱动。

使用 Composer 为 Laravel 项目安装 Horizon:

composer require laravel/horizon

安装完成后,使用 horizon:install 发布 Artisan 命令:

php artisan horizon:install

需要创建 failed_jobs 表,Laravel 将使用该表来存储任何 failed queue jobs:

php artisan queue:failed-table

php artisan migrate

升级 Horizon

当准备升级到 Horizon 的一个新的主要版本之前,一定好好看看更新声明,熟悉新特性,结合业务场景思考有没有坑。

注意,升级之后记得要重新发布 Horizon 的资源文件:

php artisan horizon:assets

配置

发布 Horizon 相关文件后,他的主要配置文件会放在 config/horizon.php。

可以在这个文件中配置队列相关选项,并且每个配置项都有详细的使用说明。

注意:确保 horizon 配置文件的 environments 部分包含你计划在其上运行 Horizon 的每个环境的条目。

'environments' => [
    'production' => [
        'supervisor-1' => [
            'connection' => 'redis',
            'queue' => [
                'high_{0}',
            ],
            'balance' => 'auto',
            'minProcesses' => 1,
            'maxProcesses' => 2,
            'tries' => 1
        ],
    ],

    'test' => [
        'supervisor-1' => [
            'connection' => 'redis',
            'queue' => [
                'high_{0}',
            ],
            'balance' => 'auto',
            'minProcesses' => 1,
            'maxProcesses' => 2,
            'tries' => 1
        ],
    ],

    'local' => [
        'supervisor-1' => [
            'connection' => 'redis',
            'queue' => [
                'high_{0}',
            ],
            'balance' => 'auto',
            'minProcesses' => 3,
            'maxProcesses' => 11,
            'tries' => 1
        ],
    ],
],

均衡配置

Horizon 提供了三种均衡策略: simple , auto ,和 false 。

  1. 默认的是 simple , 会将收到的任务均分给队列进程
'balance' => 'simple',
  1. auto 策略会根据当前的工作量调整每个队列的工作进程任务数量

例如:如果 A 队列有 1000 个待执行任务,但是你的 B 队列是空的,
Horizon 会分配更多的工作进程给 B 队列,直到 A 队列中所有任务执行完成。

  1. 当配置项 balance 配置为 false ,Horizon 会使用 Laravel 默认执行行为,它将按照配置中列出的顺序处理队列任务。

当使用 auto 策略时,您可以定义 minProcesses 和 maxProcesses 配置选项,以控制最小和最大进程数范围应向上和向下扩展到:

'environments' => [
    'production' => [
        'supervisor-1' => [
            'connection' => 'redis',
            'queue' => ['default'],
            'balance' => 'auto',
            'minProcesses' => 1,
            'maxProcesses' => 10,
            'tries' => 3,
        ],
    ],
],

失败任务记录

horizon 配置文件允许你配置应保留最近和失败任务的时间(以分钟为单位)。 默认情况下,最近的任务保留一小时,而失败的任务保留一周:

'trim' => [
    'recent' => 60,
    'failed' => 10080,
],

在这里插入图片描述

仪表盘权限验证

Horizon 仪表盘路由是 /horizon 。

默认情况下,你只能在 local 环境下访问仪表盘。

在你的 app/Providers/HorizonServiceProvider.php 文件中,有一个 gate 方法。

这里授权控制 非本地 环境中对 Horizon 的访问。

可以根据需要随意修改此门面,以限制对 Horizon 安装的访问:

/**
 * Register the Horizon gate.
 *
 * This gate determines who can access Horizon in non-local environments.
 *
 * @return void
 */
protected function gate()
{
    Gate::define('viewHorizon', function ($user) {
        return in_array($user->email, [
            'xxxx@xxx.com',
        ]);
    });
}

注意:记住,Laravel 会自动将 authenticated 用户注入到 gate 方法。

如果应用程序通过其他方法(如 IP 限制)提供 Horizon 安全,那么 Horizon 用户可能不需要 “登录”。

总结

文章开头抛出的问题是我开发过程中没考虑到的,

初识文档也没体会到 php artisan horizon:terminate 的妙处。

随着项目的不断成长,自己的技术水平和编程思想也在随之成长。

下期再见

下一篇文章会总结 Horizon 进阶知识点,包括:安装、部署、标签、通知、Metrics等。

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-10-29 12:47:50  更:2021-10-29 12:48:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:44:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码