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.
composer require daison/laravel-horizon-cluster
After installing this package, now publish the assets using horizon:install
php artisan horizon:install
Modify your original laravel's composer.json
and add this
{
"extra": {
"laravel": {
"dont-discover": [
"laravel/horizon"
]
}
}
}
Modify your config/app.php
return [
'providers' => [
// ...
Daison\LaravelHorizonCluster\AppServiceProvider::class,
App\Providers\HorizonServiceProvider::class,
],
];
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',
],
],
];
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),
],
],
],
];
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!