Integreer Laravel Horizon voor Geavanceerd Queue Management
description
Met deze prompt kan de gebruiker Laravel Horizon effectief inzetten om hun queue management te verbeteren, waardoor ze beter inzicht krijgen in job verwerking, sneller kunnen reageren op fouten en de prestaties van asynchrone taken kunnen optimaliseren. Dit biedt een gebruiksvriendelijk dashboard en waarschuwingsmechanismen die alternatieve methoden niet standaard bieden.
prompt
Help me Laravel Horizon te integreren voor het beheren en monitoren van mijn queues. Ik wil configuratie-instructies voor <specifieke queue drivers of configuraties>, uitleg over het dashbo ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een uitgebreide gids voor het integreren van Laravel Horizon in je project, inclusief Redis-configuratie, dashboardgebruik, waarschuwingen en optimalisatie voor e-mailverwerking.
**1. Laravel Horizon installeren en configureren**
a. Installeer Horizon via Composer:
```bash
composer require laravel/horizon
```
b. Publiceer de configuratie en assets:
```bash
php artisan horizon:install
```
c. Voer de migraties uit:
```bash
php artisan migrate
```
d. Voeg Horizon toe aan je `config/app.php` (voor Laravel 8+ wordt dit meestal niet meer nodig, aangezien het automatisch wordt geladen).
**2. Redis instellen voor Horizon**
a. Controleer je Redis-configuratie in `config/database.php` onder de `redis` sectie. Voorbeeld:
```php
'redis' => [
'client' => env('REDIS_CLIENT', 'phpredis'), // of 'predis'
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_DB', 0),
],
],
```
b. Zorg dat Redis draait op je server.
**3. Horizon dashboard gebruiken**
a. Start Horizon met:
```bash
php artisan horizon
```
b. Toegang tot het dashboard via:
```
http://je-domein.nl/horizon
```
c. In het dashboard kun je:
- Queue status bekijken
- Job-gegevens monitoren
- Verwerkingstijden en doorvoer analyseren
- Jobs handmatig herstarten of verwijderen
**4. Waarschuwingen en falende jobs monitoren**
a. Laravel Horizon biedt standaard monitoring voor falende jobs. Je kunt de falende jobs bekijken via het dashboard onder "Failed Jobs".
b. Om notificaties te ontvangen, kun je Laravel's mail- of Slack-notificaties gebruiken bij falende jobs:
In `app/Exceptions/Handler.php`, voeg toe:
```php
public function report(Throwable $exception)
{
if ($exception instanceof \Illuminate\Queue\Jobs\FailedJob) {
// Stuur een mail of slack bericht
}
parent::report($exception);
}
```
Alternatief kun je gebruik maken van Laravel's `Failed` event:
```php
use Illuminate\Queue\Events\JobFailed;
Event::listen(JobFailed::class, function (JobFailed $event) {
// Verzend notificatie
});
```
**5. Optimaliseren van queue workers voor E-mailverzending**
a. Gebruik meerdere workers en configuraties op basis van de workload:
In `config/horizon.php`, bijvoorbeeld:
```php
'environments' => [
'production' => [
'supervisor-1' => [
'connection' => 'redis',
'queue' => ['emails'],
'balance' => 'simple',
'processes' => 5,
'tries' => 3,
],
],
],
```
b. Specifieke queue voor e-mails:
- Plaats e-mailjobs in de `emails` queue:
```php
Mail::to($user)->queue(new WelkomMail($user));
```
c. Gebruik `php artisan horizon` om meerdere processen te laten draaien, zodat e-mails parallel kunnen worden verzonden.
d. Overweeg het gebruik van `batch` processing voor grote verzendingen:
```php
Bus::batch([
new SendEmailJob($user1),
new SendEmailJob($user2),
// ...
])->dispatch();
```
e. Stel de `tries` parameter in op 3 of meer, afhankelijk van de betrouwbaarheid van je e-mailserver.
---
**Samenvatting:**
- Installeer Horizon en configureer Redis.
- Gebruik het dashboard voor monitoring.
- Stel notificaties in bij falende jobs.
- Optimaliseer workers door passende `processes`, `queue` en `tries` te gebruiken, vooral voor e-mailverzending.
Mocht je verdere hulp nodig hebben met specifieke configuraties of codevoorbeelden, laat het gerust weten!
provider: deepseek
model: deepseek-chat
Hier is een uitgebreide handleiding voor Laravel Horizon integratie:
## Redis Configuratie
**1. Installeer Redis Server:**
```bash
sudo apt-get install redis-server
# of via Homebrew (macOS): brew install redis
```
**2. Installeer PHP Redis extensie:**
```bash
pecl install redis
# of voor Ubuntu: sudo apt-get install php-redis
```
**3. Configureer .env bestand:**
```env
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
QUEUE_CONNECTION=redis
```
**4. Configuratie in config/database.php:**
```php
'redis' => [
'client' => env('REDIS_CLIENT', 'phpredis'),
'options' => [
'cluster' => env('REDIS_CLUSTER', 'redis'),
'prefix' => env('REDIS_PREFIX', 'laravel_database_'),
],
'default' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
],
'horizon' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_HORIZON_DB', '1'),
],
],
```
## Horizon Installatie & Configuratie
**1. Installeer Horizon:**
```bash
composer require laravel/horizon
```
**2. Publiceer assets:**
```bash
php artisan horizon:install
php artisan vendor:publish --provider="Laravel\Horizon\HorizonServiceProvider"
```
**3. Configureer config/horizon.php:**
```php
'environments' => [
'production' => [
'supervisor-1' => [
'connection' => 'redis',
'queue' => ['default', 'emails'],
'balance' => 'auto',
'processes' => 10,
'tries' => 3,
'timeout' => 60,
],
],
'local' => [
'supervisor-1' => [
'connection' => 'redis',
'queue' => ['default', 'emails'],
'balance' => 'simple',
'processes' => 3,
'tries' => 3,
'timeout' => 60,
],
],
],
```
## Dashboard Gebruik
**Toegang tot dashboard:**
- Bezoek `/horizon` in je browser
- Toont real-time queue metrics
- Toont failed jobs, wachtende jobs, en verwerkte jobs
- Toont worker status en geheugengebruik
**Belangrijke functies:**
- **Metrics**: Live statistieken over queue performance
- **Failed Jobs**: Gedetailleerde informatie over mislukte jobs
- **Jobs**: Overzicht van alle jobs per queue
- **Supervisors**: Status van alle worker processes
## Waarschuwingen voor Falende Jobs
**1. Configureer notificaties in config/horizon.php:**
```php
'sms' => env('HORIZON_SMS', null),
'slack' => env('HORIZON_SLACK_WEBHOOK_URL'),
'notifications' => [
'queue' => 'slack',
],
'email' => 'your-email@example.com',
```
**2. Voorbeeld Slack notificatie:**
```php
'environments' => [
'production' => [
'supervisor-1' => [
'notifications' => [
'failed' => true,
'wait' => 60, // seconden wachten voor notificatie
],
],
],
],
```
**3. Custom notificatie handler:**
```php
// In AppServiceProvider boot method
Horizon::routeSlackNotificationsTo('https://hooks.slack.com/services/...', '#queue-errors');
```
## Optimalisatie voor E-mailverzending
**1. Specifieke email queue configuratie:**
```php
'environments' => [
'production' => [
'email-supervisor' => [
'connection' => 'redis',
'queue' => ['emails'],
'balance' => 'auto',
'processes' => 5,
'tries' => 3,
'timeout' => 30,
'memory' => 128,
'max_jobs' => 1000,
],
],
],
```
**2. Email job voorbeeld:**
```php
<?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;
use Illuminate\Support\Facades\Mail;
use App\Mail\WelcomeEmail;
class SendWelcomeEmail implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $user;
public function __construct($user)
{
$this->user = $user;
$this->onQueue('emails');
}
public function handle()
{
Mail::to($this->user->email)
->send(new WelcomeEmail($this->user));
}
}
```
**3. Queue aanroep:**
```php
SendWelcomeEmail::dispatch($user)->onQueue('emails');
```
## Horizon Commands
**Starten en monitoren:**
```bash
# Start Horizon
php artisan horizon
# Start in production mode
php artisan horizon --env=production
# Monitor status
php artisan horizon:status
# Pause/resume
php artisan horizon:pause
php artisan horizon:continue
# Terminate
php artisan horizon:terminate
```
**Supervisor configuratie voor productie:**
```bash
# /etc/supervisor/conf.d/horizon.conf
[program:horizon]
process_name=%(program_name)s
command=php /path/to/artisan horizon
autostart=true
autorestart=true
user=forge
redirect_stderr=true
stdout_logfile=/path/to/horizon.log
```
Met deze configuratie heb je een geoptimaliseerd queue systeem voor e-mailverzending met monitoring en waarschuwingsfunctionaliteit.