Laravel 用 Horizon 接管 Redis 队列:监控、失败重试与伸缩
test12026-10-228 次阅读
安装与配置
Horizon 是官方队列仪表盘,基于 Redis,把队列的吞吐、失败、延迟全部可视化。先装包并发布配置,再把默认队列驱动指向 redis。
composer require laravel/horizon
php artisan horizon:install
# .env
QUEUE_CONNECTION=redis// config/horizon.php 关键片段
'environments' => [
'production' => [
'supervisor-1' => [
'maxProcesses' => 10,
'balance' => 'auto',
'queues' => ['default', 'mail'],
],
],
'local' => [
'supervisor-1' => [
'maxProcesses' => 3,
'queues' => ['default'],
],
],
],定义带重试与超时的 Job
Job 上声明最大尝试次数、重试间隔与超时,失败会自动进 retries 队列,超过上限再落到 failed 表,可被 horizon:clear 或重试命令处理。
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class SyncOrder implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $tries = 3;
public $timeout = 60;
public $backoff = [5, 15, 30];
public function handle(): void
{
// 调第三方同步订单,失败抛异常即触发重试
}
}仪表盘与伸缩
本地跑 php artisan horizon 即可打开 /horizon 看板,观察每个队列的 jobs per minute 与失败情况。生产环境用 supervisor 拉起 horizon 进程,进程数随流量在配置里上调即可,无需改业务代码。
php artisan horizon # 本地常驻
php artisan horizon:status # 查看状态
php artisan horizon:terminate关键结论
- Horizon 把队列从黑盒变成可观测:吞吐、延迟、失败一目了然。
- 重试与退避写在 Job 上,失败可追回,不会静默丢失。
- 横向伸缩只调 supervisor 的 maxProcesses,业务无感。
T
test1
文章作者
安装与配置 Horizon 是官方队列仪表盘,基于 Redis,把队列的吞吐、失败、延迟全部可视化。先装包并发布配置,再...
- 分类
- 技术
- 发布时间
- 2026-10-22
- 字数
- 约 1490 字
- 阅读
- 8 次
