Команда messenger:stop-workers
Команда messenger:stop-workers останавливает все
запущенные воркеры Messenger. Воркер не прерывается
посреди обработки сообщения: он завершает текущее
сообщение и только затем выходит из цикла. Команда
не имеет обязательных параметров и работает через
общий кэш, поэтому её можно запустить из другого
терминала или с другого сервера.
Это удобно при деплое: вы запускаете новую версию кода, останавливаете старые воркеры и поднимаете новые с обновлённым кодом.
Синтаксис
php bin/console messenger:stop-workers
Пример
Давайте запустим воркер для транспорта async:
php bin/console messenger:consume async
Воркер начнёт слушать очередь и выведет что-то вроде:
[OK] Consuming messages from transport "async".
Теперь в другом терминале отправим команду остановки:
php bin/console messenger:stop-workers
Результат выполнения команды:
"Stopping workers..."
Первый терминал после обработки текущего сообщения завершит работу:
[OK] Consuming messages from transport "async".
[WARNING] Stopping worker...
Пример
Остановку удобно встраивать в сценарий деплоя. Создадим консольную команду, которая рассылает сообщение и затем просит воркеры остановиться:
<?php
namespace App\Command;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Messenger\Transport\Sender\SendersLocator;
#[AsCommand(
name: 'app:deploy',
description: 'Stops workers before deploy',
)]
class DeployCommand extends Command
{
public function __construct(
private MessageBusInterface $bus,
) {
parent::__construct();
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$this->bus->dispatch(new \App\Message\DeployMessage('abcde'));
$output->writeln('Stopping workers...');
return Command::SUCCESS;
}
}
?>
Запустим команду:
php bin/console app:deploy
Результат выполнения кода:
"Stopping workers..."
Смотрите также
-
команда
messenger:consume,
которая запускает воркер для обработки сообщений -
команда
messenger:failed:retry,
которая повторно запускает упавшие сообщения -
команда
messenger:failed:show,
которая показывает список упавших сообщений -
команда
messenger:stats,
которая выводит статистику по транспортам