Laravel Horizon is an elegant dashboard and configuration system for managing your Redis queues in Laravel applications. It provides a real-time view of your queue system, allowing you to monitor your job processing, manage workers, and gain insights into your queued jobs.
Key Features of Laravel Horizon:
- Dashboard: A beautiful dashboard that provides an overview of your queues, job statistics, and processing times.
- Real-Time Monitoring: View the current status of your jobs and workers in real time.
- Failed Job Management: Easily manage and retry failed jobs.
- Job Metrics: Gain insights into job processing times and other metrics to optimize your queue system.
- Queue Configuration: Allows you to configure how your queues and workers behave.
Installation
To get started with Laravel Horizon, follow these steps:
- Install Laravel Horizon: Use Composer to install the package:
1composer require laravel/horizon - Publish the Horizon Configuration: After installing, publish the Horizon configuration file:
1php artisan vendor:publish --provider="Laravel\Horizon\HorizonServiceProvider" - Run Horizon: You can run Horizon using the Artisan command:
1php artisan horizon
Configuration
Laravel Horizon’s configuration is stored in the config/horizon.php
file. You can customize various settings, such as queue connections, timeouts, and more.
Example Configuration
Here’s a basic example of what your config/horizon.php
file might look like:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
return [ 'use' => 'default', 'defaults' => [ 'supervisor' => [ 'connection' => 'redis', 'queue' => ['default'], 'balance' => 'simple', 'processes' => 1, 'tries' => 3, ], ], 'environments' => [ 'local' => [ 'supervisor' => [ 'connection' => 'redis', 'queue' => ['default'], 'balance' => 'simple', 'processes' => 1, 'tries' => 3, ], ], 'production' => [ 'supervisor' => [ 'connection' => 'redis', 'queue' => ['default'], 'balance' => 'simple', 'processes' => 3, 'tries' => 3, ], ], ], ]; |
Running Horizon
Once you’ve configured Horizon, you can start it with the following command:
1 |
php artisan horizon |
This command will start processing jobs in your Redis queues based on your configuration. You can also run Horizon in the background using a process manager like Supervisor or systemd.
Accessing the Dashboard
You can access the Horizon dashboard by visiting /horizon
in your browser. The dashboard provides various features, including:
- Job Metrics: View metrics for job throughput, wait times, and failures.
- Job Statistics: Analyze the success and failure rates of jobs.
- Failed Jobs: Manage and retry failed jobs directly from the dashboard.
Monitoring Job Processing
Laravel Horizon provides several useful features for monitoring job processing:
- Real-Time Updates: The dashboard updates in real time, showing you the current status of jobs and workers.
- Job Details: Click on a job in the dashboard to view its details, including its status, attempts, and processing time.
- Notifications: You can set up notifications for failed jobs to alert your team via Slack or other channels.
Handling Failed Jobs
Horizon makes it easy to manage failed jobs:
- Viewing Failed Jobs: Navigate to the “Failed Jobs” section in the Horizon dashboard to see all jobs that have failed.
- Retrying Jobs: You can retry a failed job directly from the dashboard by clicking the “Retry” button.
- Deleting Jobs: You can also delete failed jobs from the dashboard if they are no longer needed.
Customizing Job Retry Logic
You can customize the retry logic for specific jobs by defining a tries
property in your job class:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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; public $tries = 5; // Specify the number of retry attempts public function handle() { // Job logic here } } |
Conclusion
Laravel Horizon is an invaluable tool for monitoring and managing Redis queues in your Laravel applications. With its intuitive dashboard, real-time monitoring, and robust job management features, you can ensure your job processing system runs smoothly and efficiently.
Additional Considerations
- Supervisor Integration: Consider using a process manager like Supervisor to keep Horizon running in the background.
- Performance: Regularly monitor job performance metrics to identify bottlenecks and optimize processing.
- Security: Protect your Horizon dashboard by implementing authentication or IP whitelisting, especially in production environments.
- Laravel Breeze – Simple authentication starter kit
- Laravel Jetstream – Scaffolding for Laravel apps
- Laravel Passport – API authentication via OAuth2
- Laravel Sanctum – Simple API authentication
- Spatie Laravel Permission – Role and permission management
- Laravel Cashier – Subscription billing with Stripe
- Laravel Scout – Full-text search using Algolia
- Laravel Socialite – OAuth authentication (Google, Facebook, etc.)
- Laravel Excel – Excel import and export for Laravel
- Laravel Horizon – Redis queues monitoring
- Laravel Nova – Admin panel for Laravel
- Laravel Fortify – Backend authentication for Laravel
- Laravel Vapor – Serverless deployment on AWS
- Laravel Telescope – Debugging assistant for Laravel
- Laravel Dusk – Browser testing
- Laravel Mix – API for compiling assets
- Spatie Laravel Backup – Backup management
- Laravel Livewire – Building dynamic UIs
- Spatie Laravel Media Library – Manage media uploads
- Laravel Excel – Excel spreadsheet handling
- Laravel Debugbar – Debug tool for Laravel
- Laravel WebSockets – Real-time communication
- Spatie Laravel Sitemap – Generate sitemaps
- Laravel Spark – SaaS scaffolding
- Laravel Envoy – Task runner for deployment
- Spatie Laravel Translatable – Multilingual model support
- Laravel Backpack – Admin panel
- Laravel AdminLTE – Admin interface template
- Laravel Collective Forms & HTML – Simplified form and HTML generation
- Spatie Laravel Analytics – Google Analytics integration
- Laravel Eloquent Sluggable – Automatically create slugs
- Laravel Charts – Chart integration
- Laravel Auditing – Track changes in models
- Laravel JWT Auth – JSON Web Token authentication
- Laravel Queue Monitor – Monitor job queues
- Spatie Laravel Query Builder – Filter, sort, and include relationships in Eloquent queries
- Laravel Datatables – jQuery Datatables API
- Laravel Localization – Multilingual support for views and routes Advertisement
- Laravel Acl Manager – Access control list manager
- Laravel Activity Log – Record activity in your app
- Laravel Roles – Role-based access control
- Spatie Laravel Tags – Tagging models
- Laravel Installer – CLI installer for Laravel
- Laravel Breadcrumbs – Generate breadcrumbs in Laravel
- Laravel Mailgun – Mailgun integration for Laravel
- Laravel Trustup Model History – Store model change history
- Laravel Deployer – Deployment automation tool
- Laravel Auth – Custom authentication guards
- Laravel CORS – Cross-Origin Resource Sharing (CORS) support
- Laravel Notifications – Send notifications through multiple channels
- Spatie Laravel Http Logger – Log HTTP requests
- Laravel Permission Manager – Manage permissions easily
- Laravel Stubs – Customize default stubs in Laravel
- Laravel Fast Excel – Speed up Excel exports
- Laravel Image – Image processing
- Spatie Laravel Backup Server – Centralize backups for Laravel apps
- Laravel Forge API – Manage servers through the Forge API
- Laravel Blade SVG – Use SVGs in Blade templates
- Laravel Ban – Ban/unban users from your application
- Laravel API Response – Standardize API responses
- Laravel SEO – Manage SEO meta tags
- Laravel Settings – Store and retrieve settings
- Laravel DOMPDF – Generate PDFs
- Laravel Turbo – Full-stack framework for building modern web apps
- Spatie Laravel Event Sourcing – Event sourcing implementation
- Laravel Jetstream Inertia – Jetstream’s Inertia.js integration
- Laravel Envoy Tasks – Task automation
- Laravel Likeable – Like/dislike functionality
- Laravel GeoIP – Determine visitor’s geographic location
- Laravel Country State City – Dropdowns for country, state, and city
- Laravel Hashids – Generate short unique hashes
- Laravel Repository – Repository pattern for Laravel
- Laravel UUID – UUID generation for models
- Spatie Laravel Medialibrary Pro – Enhanced media management
- Laravel Queue Monitor – Monitor Laravel job queues
- Laravel User Activity – Monitor user activity
- Laravel DB Snapshots – Create database snapshots
- Laravel Twilio – Twilio integration
- Laravel Roles – Role-based permission handling
- Laravel Translatable – Add translations to Eloquent models
- Laravel Teamwork – Manage teams in multi-tenant apps
- Laravel Full Text Search – Add full-text search to Laravel models
- Laravel File Manager – File and media management
- Laravel User Timezones – Automatically detect user time zones
- Laravel ChartsJS – Render charts with ChartsJS
- Laravel Stripe – Stripe API integration
- Laravel PDF Generator – PDF generation
- Laravel Elasticsearch – Elasticsearch integration
- Laravel Simple Qrcode – Generate QR codes
- Laravel Timezone – Manage timezones and conversions
- Laravel Collective API – API management for Laravel
- Laravel Rest API Boilerplate – REST API starter kit
- Laravel Multi Auth – Multi-authentication functionality
- Laravel Voyager – Admin panel for Laravel
- Laravel Voyager Database – Database manager for Voyager
- Laravel Categories – Handle categories for models
- Laravel Multitenancy – Multi-tenancy implementation
- Laravel Access Control – Advanced access control for users
- Laravel Menus – Menu management
- Laravel Translatable Routes – Multilingual route handling