Laravel Horizon for PHP:完整指南及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Laravel Horizon:PHP 中强大的 Redis 队列监控与管理

\n\n

在现代 PHP Web 开发中,通过队列进行异步任务处理已成为事实上的标准。Laravel 提供了内置的队列支持,但当项目规模扩大时,管理数十个工作进程、跟踪其性能以及诊断问题会变得困难。正是在这种情况下,Laravel Horizon——一个用于监控和管理 Redis 队列的强大工具——应运而生。

\n\n

Horizon 不仅仅是一个监控面板。它是一个完整的队列管理系统,提供了一个美观的 Web 界面,用于跟踪队列工作的所有方面:已处理任务数量、执行时间、错误数量、工作进程状态等等。与手动启动工作进程的标准方法不同,Horizon 会自动管理它们,在多个进程之间分配负载,并根据当前负载进行平衡。

\n\n

Horizon 的关键优势在于它与 Redis 的集成。它不仅将 Redis 用作队列驱动程序,还将其用作指标和工作进程状态的存储。这使得它异常快速且可扩展。您可以在多台服务器上运行 Horizon,它将从所有工作进程收集数据到一个统一的管理面板中。这对于每一毫秒都至关重要的生产环境来说,是一个理想的解决方案。

\n\n

安装

\n\n

Horizon 的安装通过 Composer(PHP 的标准包管理器)完成。请确保您已安装 Composer,并且您的项目使用 Laravel 5.5+。

\n\n
composer require laravel/horizon
\n\n

安装包之后,需要发布其配置文件和资源:

\n\n
php artisan horizon:install
\n\n

此命令将创建配置文件 config/horizon.php 并注册 Horizon 的服务提供者。如果您使用 Laravel 8+,还会创建路由文件 routes/horizon.php。

\n\n

接下来,需要将提供者添加到 config/app.php(如果未自动添加):

\n\n
'providers' => [\n    // 其他提供者...\n    App\\Providers\\HorizonServiceProvider::class,\n],
\n\n

之后,需要运行迁移来创建 Horizon 运行所需的表(尽管主要逻辑使用 Redis,但某些数据存储在数据库中):

\n\n
php artisan migrate
\n\n

最后,需要配置 Redis。确保您已安装并运行 Redis 服务器,并且在 .env 文件中指定了正确的连接参数:

\n\n
REDIS_HOST=127.0.0.1\nREDIS_PASSWORD=null\nREDIS_PORT=6379
\n\n

快速入门:最小工作示例

\n\n

安装和配置完成后,您可以立即启动 Horizon 并查看其运行效果。

\n\n

步骤 1:启动 Horizon

\n\n

在终端中执行命令:

\n\n
php artisan horizon
\n\n

您将看到 Horizon 启动多个工作进程。默认情况下,它会创建三个进程来处理来自 default 队列的任务。

\n\n

步骤 2:创建一个队列任务

\n\n

让我们创建一个简单的任务来模拟一个耗时操作:

\n\n
<?php\n\nnamespace App\\Jobs;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass ProcessPodcast implements ShouldQueue\n{\n    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;\n\n    protected $podcastId;\n\n    public function __constru                    

推荐