milespong/dynamic-horizon

基于 Laravel Horizon 的动态队列实现

v1.0.0 2020-02-22 10:00 UTC

This package is auto-updated.

Last update: 2024-09-13 20:17:12 UTC


README

此包可以帮助动态扩展Laravel Horizon 监督器。

特性

Laravel Horizon,从最初配置创建监督器,对 horizon.php 有高度约束

Dynamic Horizon,基于 Laravel Horizon,即使在初始配置文件中,也可以动态创建监督器。这在 SaaS 系统中非常有用

安装

使用以下命令通过 composer 安装此包

composer require milespong/dynamic-horizon

更新 composer 后,将服务提供者添加到 config/app.php 中的 providers 数组中

MilesPong\Horizon\DynamicHorizonServiceProvider::class

Laravel 5.5+ 使用包自动发现,因此不需要手动添加 ServiceProvider。

用法

发布配置文件 dynamic-horizon.php

php artisan vendor:publish --provider="MilesPong\Horizon\DynamicHorizonServiceProvider" --tag=config

.env 中设置一个值 HORIZON_MASTER_ID 来指示当前 horizon 主监督器的标识符

初始化监督器

AppServiceProviderboot 方法中添加以下代码片段

use \MilesPong\Horizon\DynamicHorizonSupervisor;  
  
...  
  
public function boot()  
{  
    $this->app->make(DynamicHorizonSupervisor::class)->initial('YOUR_MASTER_ID', function () {  
        return [  
            'supervisor-1' => [  
                'connection' => 'redis',  
                'queue' => ['foo'],  
                'balance' => 'auto',  
                'processes' => 10,  
                'tries' => 3,  
                'sleep' => 3,  
            ],  
            // 'supervisor-2', 'supervisor-3', ...  
        ];  
    });  
}  

部署新的监督器

当你想在引导程序之外的其他过程中添加监督器时,可以使用以下方法

use \MilesPong\Horizon\DynamicHorizonSupervisor;  
  
app()->make(DynamicHorizonSupervisor::class)->add('YOUR_MASTER_ID', function () {  
    return [  
        'supervisor-1' => [  
            'connection' => 'redis',  
            'queue' => ['foo'],  
            'balance' => 'auto',  
            'processes' => 10,  
            'tries' => 3,  
            'sleep' => 3,  
        ],  
        // 'supervisor-2', 'supervisor-3', ...  
    ];  
});