daison/laravel-horizon-cluster

A modified laravel/horizon with cluster support

0.3.0 2024-10-24 11:23 UTC

This package is auto-updated.

Last update: 2024-10-25 07:43:57 UTC


README

Packagist Downloads

seeking's laravel horizon

Laravel Horizon - Cluster Support

This package extends Laravel Horizon with support for a Redis cluster. Based on my testing, it should also be compatible with AWS Elastic Load Balancer.

Installation

composer require daison/laravel-horizon-cluster

After installing this package, now publish the assets using horizon:install

php artisan horizon:install

Remove the auto discover

Modify your original laravel's composer.json and add this

{
    "extra": {
        "laravel": {
            "dont-discover": [
                "laravel/horizon"
            ]
        }
    }
}

Use the modified horizon

Modify your config/app.php

return [
    'providers' => [
        // ...

        Daison\LaravelHorizonCluster\AppServiceProvider::class,
        App\Providers\HorizonServiceProvider::class,
    ],
];

config/database.php

Usually your laravel config/database.php should look like this.

return [
    'redis' => [
        'client' => 'predis',

        'clusters' => [
            'default' => [
                [
                    'host'     => env('REDIS_HOST', '127.0.0.1'),
                    'port'     => env('REDIS_PORT', '6379'),
                    'password' => env('REDIS_PASSWORD', null),
                    'database' => 0,
                ],
            ],
            // ...
        ],

        'options' => [
            'cluster' => 'redis',
        ],
    ],
];

config/horizon.php

Make sure your horizon will have this kind of config or similar.

return [
    'use' => 'clusters.default',

    // ...

    'defaults' => [
        'worker' => [
            'connection' => 'redis',
            'balance'    => env('HORIZON_QUEUE_WORKER_BALANCE', false),
            'timeout'    => env('HORIZON_QUEUE_WORKER_TIMEOUT', 10),
            'sleep'      => env('HORIZON_QUEUE_WORKER_SLEEP', 3),
            'maxTries'   => env('HORIZON_QUEUE_WORKER_MAXTRIES', 3),
        ],
    ],

    'environments' => [
        env('APP_ENV') => [
            'worker' => [
                'connection' => 'redis',
                'queue'      => [
                    '{redis-high}',
                    '{redis}',
                    '{redis-low}',
                ],
                'memory'       => env('HORIZON_QUEUE_WORKER_MEMORY', 128),
                'minProcesses' => env('HORIZON_QUEUE_WORKER_MIN_PROCESSES', 1),
                'maxProcesses' => env('HORIZON_QUEUE_WORKER_MAX_PROCESSES', 3),
            ],
        ],
    ],
];

config/queue.php

Make sure your 'redis' is wrapped with curly brace

// ...

'redis-low' => [
    // ...
    'queue' => env('REDIS_QUEUE', '{redis-low}'),
    // ...
],

'redis' => [
    // ...
    'queue' => env('REDIS_QUEUE', '{redis}'),
    // ...
],

'redis-high' => [
    // ...
    'queue' => env('REDIS_QUEUE', '{redis-high}'),
    // ...
],

Enjoy using Laravel Horizon with Cluster support!