Movatterモバイル変換


[0]ホーム

URL:


Skip to content
DEV Community
Log in Create account

DEV Community

Jonathan Gonçalves
Jonathan Gonçalves

Posted on • Edited on

Adicionando o Laravel Horizon em nosso projeto

O Laravel Horizon simplifica a escalabilidade e configuração dos trabalhadores de fila, proporcionando um painel intuitivo e eficiente para o gerenciamento de filas no Laravel. Com métricas essenciais como taxa de transferência, tempo de execução e falhas, o Horizon facilita o monitoramento do sistema de filas.

Vamos fazer um exemplo prático utilizando o projeto product-api como base.

Product API

Easily start application with docker.

docker compose up
Enter fullscreen modeExit fullscreen mode

Laravel Logo

Build StatusTotal DownloadsLatest Stable VersionLicense

About Laravel

Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as:

Laravel is accessible, powerful, and provides tools required for large, robust applications.

Learning Laravel

Laravel has the most extensive and thoroughdocumentation and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework.

You may also try theLaravel Bootcamp, where you will be guided through building a modern Laravel…




Antes de prosseguir com o Laravel Horizon, é aconselhável possuir um bom entendimento sobre o uso de filas no Laravel.

Assumindo que você já tenha um bom entendimento sobre Laravel Queue, vamos começar.

Instale o Horizon no projeto.

composer require laravel/horizon
Enter fullscreen modeExit fullscreen mode

Publique os assets.

php artisan horizon:install
Enter fullscreen modeExit fullscreen mode

Agora, modifique o arquivo recém-criado config/horizon.php, incluindo a fila data_sync no array queue.

'defaults'=>['supervisor-1'=>['connection'=>'redis','queue'=>['default','data_sync'],'balance'=>'auto','autoScalingStrategy'=>'time','maxProcesses'=>1,'maxTime'=>0,'maxJobs'=>0,'memory'=>128,'tries'=>1,'timeout'=>60,'nice'=>0,],],
Enter fullscreen modeExit fullscreen mode

A configuração atual atende aos jobs despachados para a fila data_sync. No entanto, se sua aplicação envia jobs mais extensos, pesados ou enfrenta picos de alta demanda, é aconselhável ajustar as configurações para otimizar o desempenho e garantir uma execução eficiente.

Imagine um cenário em que uma fila, lida com jobs demorados que podem levar até 5 minutos para processar.

Vamos configurar um novo supervisor para esse cenário.

// example of a queue for processing long, heavy and high-demand jobs'supervisor-2'=>['connection'=>'redis','queue'=>['long_processing_jobs'],'balance'=>'auto','autoScalingStrategy'=>'time','maxProcesses'=>1,'maxTime'=>0,'maxJobs'=>0,'memory'=>128,'tries'=>3,'timeout'=>300,'nice'=>0,],
Enter fullscreen modeExit fullscreen mode

Atenção para retry_after em config/queue.php, ele deve ser maior que o timeout definido no supervisor de config/horizon.php.

'long_processing_jobs'=>['driver'=>'redis','connection'=>'default','queue'=>'long_processing_jobs','retry_after'=>450,'block_for'=>null,'after_commit'=>false,],
Enter fullscreen modeExit fullscreen mode

Vamos supor que durante picos de alta demanda, nossa fila de produção enfileira mais de 100 jobs em poucos minutos.

Para otimizar o desempenho da nossa fila, podemos ajustar os parâmetros maxProcesses e balanceMaxShift. Esses ajustes devem ser feitos considerando sempre os recursos disponíveis.

'environments'=>['production'=>['supervisor-2'=>['maxProcesses'=>20,// parallel processes'balanceMaxShift'=>4,'balanceCooldown'=>3,'tries'=>3,],],],
Enter fullscreen modeExit fullscreen mode

Podemos iniciar o Horizon com o comando abaixo.

php artisan horizon
Enter fullscreen modeExit fullscreen mode

É recomendado o uso do Supervisor para gerenciar nosso processo do Horizon em produção, então vamos instala-lo.

sudoapt-getinstallsupervisor
Enter fullscreen modeExit fullscreen mode

Agora vamos criar um arquivo de configuração em /etc/supervisor/conf.d/horizon.conf.

[program:horizon]process_name=%(program_name)scommand=php /home/jonathan/repo/product-api/artisan horizonautostart=trueautorestart=trueuser=jonathanredirect_stderr=truestdout_logfile=/home/jonathan/repo/product-api/storage/logs/horizon.logstopwaitsecs=3600
Enter fullscreen modeExit fullscreen mode

Alterecommand estdout_logfile com o caminho da sua aplicação e user para seu usuario.

Crie o arquivostorage/logs/horizon.log dentro da sua aplicação.

Inicie o Supervisor.

// System Vsudoservicesupervisorstart// Systemdsudosystemctlstartsupervisor
Enter fullscreen modeExit fullscreen mode

Você poderá ver o log do Horizon emstorage/logs/horizon.log e o log do Supervisor em/var/log/supervisor/supervisord.log.

Com as filas e supervisores do Horizon configurados e o Supervisor gerenciando o processo do Horizon, vamos rodar nossa aplicação product-api.

PHP_CLI_SERVER_WORKERS=2 php artisan serve--port 8001
Enter fullscreen modeExit fullscreen mode

Vamos requisitar o endpoint que despacha o job de sinc de dados.

curl http://localhost:8001/api/v1/sync/plataform1/products
Enter fullscreen modeExit fullscreen mode

Podemos acessar o dashboard do Horizon para acompanhar tudo com métricas detalhadas emhttp://localhost:8001/horizon.

Horizon Dashboard

Você pode ajustarapp/Providers/HorizonServiceProvider.php para que apenas usuários especificos vejam o dashboard em ambiente não local.

protectedfunctiongate():void{Gate::define('viewHorizon',function(User$user){returnin_array($user->email,['jonathan@example.com',]);});}
Enter fullscreen modeExit fullscreen mode

Ao tentar acessar com qualquer outro usuário, o forbidden status é retornado.

Forbidden Status

Ao longo deste artigo, exploramos as vantagens do Laravel Horizon para simplificar a gestão de filas no Laravel, destacando métricas essenciais. Com o exemplo prático no projeto Product-API, aprendemos a otimizar a escalabilidade e configurar trabalhadores de fila de maneira eficiente.

Top comments(0)

Subscribe
pic
Create template

Templates let you quickly answer FAQs or store snippets for re-use.

Dismiss

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment'spermalink.

For further actions, you may consider blocking this person and/orreporting abuse

Fullstack developer
  • Joined

More fromJonathan Gonçalves

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

Log in Create account

[8]ページ先頭

©2009-2025 Movatter.jp