Laravel Horizon: Monitoramento e Gerenciamento Poderoso de Filas Redis em PHP
No desenvolvimento web moderno com PHP, o processamento assíncrono de tarefas através de filas tornou-se um padrão de fato. O Laravel oferece suporte nativo a filas, mas quando o projeto cresce, gerenciar dezenas de workers, monitorar seu desempenho e diagnosticar problemas se torna complexo. É aqui que o Laravel Horizon entra em cena — uma ferramenta poderosa para monitoramento e gerenciamento de filas Redis.
Horizon não é apenas um painel de monitoramento. É um sistema completo de gerenciamento de filas que oferece uma interface web elegante para acompanhar todos os aspectos do funcionamento das filas: número de tarefas processadas, tempo de execução, quantidade de erros, status dos workers e muito mais. Diferente da abordagem padrão, onde você inicia os workers manualmente, o Horizon os gerencia automaticamente, distribuindo a carga entre vários processos e balanceando-os de acordo com a demanda atual.
A principal vantagem do Horizon é sua integração com Redis. Ele utiliza o Redis não apenas como driver de fila, mas também como armazenamento para métricas e estado dos workers. Isso o torna incrivelmente rápido e escalável. Você pode executar o Horizon em vários servidores, e ele coletará dados de todos os workers em um único painel de controle. É a solução ideal para ambientes de produção, onde cada milissegundo importa.
Instalação
A instalação do Horizon é feita via Composer — o gerenciador de pacotes padrão para PHP. Certifique-se de ter o Composer instalado e que seu projeto use Laravel 5.5 ou superior.
composer require laravel/horizon
Após instalar o pacote, é necessário publicar seus arquivos de configuração e assets:
php artisan horizon:install
Este comando criará o arquivo de configuração config/horizon.php e registrará o service provider do Horizon. Também será criado o arquivo de rotas routes/horizon.php, se você estiver usando Laravel 8 ou superior.
Em seguida, adicione o provider no arquivo config/app.php (caso não tenha sido adicionado automaticamente):
'providers' => [
// Outros providers...
App\Providers\HorizonServiceProvider::class,
],
Depois disso, execute as migrações para criar as tabelas necessárias para o funcionamento do Horizon (embora a lógica principal use Redis, alguns dados são armazenados no banco de dados):
php artisan migrate
Por fim, configure o Redis. Verifique se o servidor Redis está instalado e em execução, e se o arquivo .env possui os parâmetros de conexão corretos:
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
Primeiros Passos: Exemplo Mínimo Funcional
Após a instalação e configuração, você pode iniciar o Horizon e vê-lo em ação imediatamente.
Passo 1: Inicie o Horizon
No terminal, execute o comando:
php artisan horizon
Você verá o Horizon iniciar vários processos workers. Por padrão, ele cria três processos para processar tarefas da fila default.
Passo 2: Crie uma tarefa para a fila
Vamos criar uma tarefa simples que simula uma operação demorada:
<?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 ProcessPodcast implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $podcastId;
public function __construct($podcastId)
{
$this->podcastId = $podcastId;
}
public fun Também na biblioteca
Configuração de aplicações C++: bibliotecas e abordagens
Guzzle para PHP: guia completo com exemplos
Cache em Go (Golang): Redis, cache em grupo e cache in-memory
Trabalhando com Kafka em PHP: bibliotecas, conexão e exemplos de código
Trabalhando com YAML em Go (Golang): bibliotecas go-yaml e yaml.v3