Новое в Symfony 6.4: Больше встроенных обработчиков сообщений
Компонент Messenger
построен на базе двух основных концепций: сообщений (это классы, содержащие данные) и обработчиков (это классы, вызываемые при отправке сообщения).
В Symfony 6.4 мы вводим несколько новых встроенных обработчиков, чтобы вы могли использовать эти возможности в своих приложениях без необходимости их реализации.
Запуск обработчика процесса
- Pull Request: [Messenger][Process] add
RunProcessMessage
andRunProcessMessageHandler
#49813 Kevin Bond
Этот обработчик создаёт новый процесс с заданной информацией и запускает его с помощью компонента 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'
));
// ...
}
}
Запуск обработчика команды
- Pull Request: [Console][Messenger] add
RunCommandMessage
andRunCommandMessageHandler
#49814 Kevin Bond
Этот обработчик запускает заданное имя команды и аргументы как команду терминала используя компонент 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
- Pull Request: [HttpClient][Messenger] add
PingWebhookMessage
andPingWebhookMessageHandler
#49815 Kevin Bond
Этот обработчик с помощью компонента 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);
}
}