0Pricing
PHP Academy · Урок

Создание и отправка заданий

Создавайте класс задания с помощью Artisan и отправляйте его из контроллеров

«Создание и отправка заданий» — бесплатный урок PHP Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения PHP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс PHP Academy содержит 4 уроков всего.

Что такое задание?

Задание — это класс PHP, инкапсулирующий одну единицу работы в очереди. Каждое задание реализует handle(), который рабочий процесс очереди вызывает для выполнения задачи.

Создание задания

Используйте Artisan, чтобы создать класс задания. Флаг --queue делает его пригодным для постановки в очередь (это значение используется по умолчанию).

$ php artisan make:job SendWelcomeEmail

Структура класса задания

Задание содержит метод handle() и может получать данные через свой конструктор.

<?php
namespace App\Jobs;

use App\Models\User;
use App\Mail\WelcomeEmail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\SerializesModels;

class SendWelcomeEmail implements ShouldQueue
{
    use Dispatchable, Queueable, SerializesModels;

    public function __construct(private User $user) {}

    public function handle(): void
    {
        Mail::to($this->user)->send(new WelcomeEmail($this->user));
    }
}

Отправка задания

Отправляйте задание из любой части приложения.

<?php
// Dispatch to queue:
SendWelcomeEmail::dispatch($user);

// Dispatch with delay:
SendWelcomeEmail::dispatch($user)->delay(now()->addMinutes(10));

// Dispatch synchronously (bypass queue):
SendWelcomeEmail::dispatchSync($user);

Вспомогательные средства отправки

Также можно использовать глобальное вспомогательное средство dispatch().

<?php
dispatch(new SendWelcomeEmail($user))
    ->onQueue("emails")
    ->delay(now()->addHour());

onQueue()

При отправке укажите конкретную именованную очередь.

<?php
SendWelcomeEmail::dispatch($user)->onQueue("emails");

onConnection()

Укажите конкретное подключение к очереди (например, SQS для одного задания и Redis для другого).

<?php
SendWelcomeEmail::dispatch($user)->onConnection("sqs");

Сериализация моделей

Трейт SerializesModels гарантирует, что переданные заданию модели Eloquent сериализуются по ID, а затем повторно извлекаются рабочим процессом из базы данных, что позволяет избежать устаревших данных.

afterResponse()

Отправьте задание после отправки HTTP-ответа пользователю — пользователю не придётся ждать затрат времени на отправку задания.

<?php
App::terminating(fn () => SendWelcomeEmail::dispatch($user));

Тестирование заданий

Используйте Queue::fake() в тестах, чтобы проверить отправку заданий, не выполняя их на самом деле.

<?php
Queue::fake();
$this->post("/register", $data);
Queue::assertPushed(SendWelcomeEmail::class);

Уникальные задания

Реализуйте ShouldBeUnique, чтобы одинаковые задания для одних и тех же данных не накапливались в очереди.

Итоги

Создавайте задания с помощью Artisan. Реализуйте ShouldQueue и handle(). Отправляйте задания через ::dispatch(). Направляйте их в очереди с помощью onQueue(). Тестируйте их с помощью Queue::fake().

Быстрая проверка

Какой интерфейс делает класс задания пригодным для постановки в очередь?

Часто задаваемые вопросы

Урок «Создание и отправка заданий» бесплатный?

Да — полный текст урока «Создание и отправка заданий» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс PHP Academy, подпишись на CoddyKit PRO. Курс PHP Academy содержит 4 уроков всего.

Чему я научусь в уроке «Создание и отправка заданий»?

Создавайте класс задания с помощью Artisan и отправляйте его из контроллеров Ты практикуешь PHP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать PHP Academy?

Предыдущий опыт не требуется. PHP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Создание и отправка заданий»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке PHP Academy?

Да. Каждый урок PHP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Основы очередей и драйверы
  2. Создание и отправка заданий
  3. Повторные попытки, задержки и цепочки заданий
  4. Мониторинг очередей с Laravel Horizon
← Назад к PHP Academy