Покращення керування чергами за допомогою події JobQueueing у Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 16 квітня, 2025
Відкрийте для себе новий рівень управління чергами в Laravel з допомогою події JobQueueing, яка дозволяє контролювати завдання перед їх відправленням у чергу. Не пропустіть можливість дізнатися, як впровадження цієї функціональності може суттєво покращити моніторинг та управління вашими завданнями

Система черг Laravel стала ще потужнішою завдяки новій події JobQueueing. Цей хук для попереднього відправлення відкриває нові можливості для моніторингу та управління завданнями ще до того, як вони потраплять до вашої черги.

Подієва архітектура системи черг Laravel вже має кілька хуків життєвого циклу, таких як JobProcessing та JobProcessed. Подія JobQueueing розширює ці можливості, дозволяючи отримати доступ до ранньої стадії — саме тоді, коли завдання готуються до відправлення постачальнику черги.

Ось простий приклад реалізації цієї нової події:

use Illuminate\Queue\Events\JobQueueing;
use Illuminate\Support\Facades\Event;

// Реєструємо обробник для події JobQueueing
Event::listen(function (JobQueueing $event) {
    // Отримуємо інформацію про чергове завдання
    $job = $event->job;
    $connectionName = $event->connectionName;
    $payload = $event->payload;

    // Виконуємо попередню логіку черги
});

Ця функція відкриває безліч практичних застосувань для управління та моніторингу черг. Наприклад, ви можете впровадити логування черг, орієнтоване на середовище:

<?php

namespace App\Providers;

use Illuminate\Queue\Events\JobQueueing;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Log;

class AppServiceProvider extends ServiceProvider
{
    public function boot(): void
    {
        // Створюємо локальний логгер для завдань
        Event::listen(function (JobQueueing $event) {
            if (app()->environment('local')) {
                Log::info('Queueing job', [
                    'job' => get_class($event->job),
                    'connection' => $event->connectionName,
                    'queue' => $event->payload['queue'] ?? 'default'
                ]);
            }
        });
    }
}

Цей підхід дозволяє командам створювати докладні інформаційні панелі активності черг або впроваджувати спеціалізовану логіку, що виконується безпосередньо перед тим, як завдання потраплять до системи черг. Ви можете розширити це, додаючи метадані до завдань, запроваджуючи обмеження швидкості для певних типів завдань або динамічно перенаправляючи завдання до різних черг залежно від навантаження на систему