Создание и отправка заданий
Создавайте класс задания с помощью 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 — локальная установка не требуется.
Все уроки этого курса
- Основы очередей и драйверы
- Создание и отправка заданий
- Повторные попытки, задержки и цепочки заданий
- Мониторинг очередей с Laravel Horizon