侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

【Laravel-海贼王系列】第十九章, 精通 Horizon 之后可以为所欲为(上)

2022-07-10 星期日 / 0 评论 / 0 点赞 / 42 阅读 / 4243 字

关于 HorizonHorizon 是 Laravel 作者对框架 Queue 的一个补充包,提供了友好的 UI 界面和 Supervisor 进程管理启动`php artisan horizon`完

关于 Horizon

HorizonLaravel 作者对框架 Queue 的一个补充包,提供了友好的 UI 界面和 Supervisor 进程管理


启动

`php artisan horizon`

完整结构

Horizon 在 Redis 中的完整结构 , 后面解释字段含义。

源码解析

开始进入源码部分了,请坐稳扶好, 这是我们启动 Horizon 的时候触发的代码,标注了 6 处待分析的地方

public function handle(MasterSupervisorRepository $masters){    if ($masters->find(MasterSupervisor::name())) {        return $this->comment('A master supervisor is already running on this machine.');    }  1️⃣     $master = (new MasterSupervisor)->handleOutputUsing(function ($type, $line) {        $this->output->write($line);    }); 2️⃣    ProvisioningPlan::get(MasterSupervisor::name())->deploy(        $this->option('environment') ?? config('horizon.env') ?? config('app.env')    ); 3️⃣    $this->info('Horizon started successfully.');    pcntl_async_signals(true); 4️⃣    pcntl_signal(SIGINT, function () use ($master) {        $this->line('Shutting down...');        return $master->terminate();    }); 5️⃣    $master->monitor(); 6️⃣}

6 块代码分析

  • 1️⃣ 这里就是生成一个 gethostname() + Str::random(4)Master 进程名称,如果不幸产生了同名的进程,那么直接返回一个错误提醒~

  • 2️⃣初始化 MasterSupervisor 对象

    $this->name 在第一步就已经生成了静态的名字了

    $this->supervisors 可以看出给了一个集合,一看就是要支持多个进程的样子

    $this->output 第二步就是让 output 属性能拥有输出到缓冲区的能力

    最后一步是刷新,刷新高清大图中的 horizon:master:gethostname()+Str::random(4) 这个进程名称

    关于这个 flush 方法干了啥大家一定很好奇 $this->connection()->del('commands:'.$name);

    这就是它做的事情,去 Redis 删除这个 key。


  • 3️⃣过了四级的我翻译了一下:

    创建一个资源分配计划!

    这个就是 Horizon 的配置文件,里面的 processes 进程数,balance 进程分配策略等等各项参数

    就是通过这个 ProvisioningPlan 类解析的内容。

广告 广告

评论区