Новое в Symfony 6.4: Больше встроенных обработчиков сообщений

Источник: «New in Symfony 6.4: More Built-in Message Handlers»
В Symfony 6.4 добавлены новые обработчики Messenger, позволяющие запускать процессы, команды и пинговать URL-адреса.

Компонент Messenger построен на базе двух основных концепций: сообщений (это классы, содержащие данные) и обработчиков (это классы, вызываемые при отправке сообщения).

В Symfony 6.4 мы вводим несколько новых встроенных обработчиков, чтобы вы могли использовать эти возможности в своих приложениях без необходимости их реализации.

Запуск обработчика процесса

Этот обработчик создаёт новый процесс с заданной информацией и запускает его с помощью компонента Process:

use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Process\Messenger\RunProcessMessage;

class SomeService
{
public function __construct(private readonly MessageBusInterface $bus)
{
}

public function cleanUp(): void
{
// после обработки он возвращает объект RunProcessContext, содержащий такую информацию,
// как код выхода, содержимое вывода и т.д.
$this->bus->dispatch(new RunProcessMessage(
['rm', '-rf', 'var/log/temp/*'],
cwd: '/my/custom/working-dir'
));

// ...
}
}

Запуск обработчика команды

Этот обработчик запускает заданное имя команды и аргументы как команду терминала используя компонент Console:

use Symfony\Component\Console\Messenger\RunCommandMessage;
use Symfony\Component\Messenger\MessageBusInterface;

class SomeService
{
public function __construct(private readonly MessageBusInterface $bus)
{
}

public function cleanUp(): void
{
// ...

// после обработки он возвращает объект RunCommandContext с информацией,
// такой как код выхода, содержимое вывода и т.д.
$this->bus->dispatch(new RunCommandMessage('app:my-cache:clean-up --dir=var/temp'));
$this->bus->dispatch(new RunCommandMessage('cache:clear'));
}
}

Класс RunCommandMessage определяет аргументы конструктора $throwOnFailure и $catchExceptions, чтобы вы могли лучше контролировать, что делать при возникновении ошибки.

Обработчик пинга Webhook

Этот обработчик с помощью компонента HttpClient отправляет запрос на заданный webhook URL. Комбинируйте его с компонентом Scheduler для повторяющегося пинга URL:

use Symfony\Component\HttpClient\Messenger\RPingWebhookMessage;
use Symfony\Component\Messenger\MessageBusInterface;

class SomeService
{
public function __construct(private readonly MessageBusInterface $bus)
{
}

public function ping(): void
{
// HttpExceptionInterface выбрасывает исключение на 3xx/4xx/5xx
$this->bus->dispatch(new PingWebhookMessage('GET', 'https://example.com/status');

// Пингует, но не выбрасывает исключение на 3xx/4xx/5xx
$this->bus->dispatch(new PingWebhookMessage('GET', 'https://example.com/status', throw: false);
}
}

Дополнительные материалы

Предыдущая Статья

CSS text-wrap: pretty

Следующая Статья

Семь "трюков" с dd() в Laravel