Команда messenger:failed:retry
Команда messenger:failed:retry берёт сообщения
из очереди failed и повторно отправляет их
в шину Messenger для обработки. Первым параметром
можно передать ID конкретного сообщения. Без параметров
команда работает в интерактивном режиме и предлагает
выбрать сообщения из списка.
Команда полезна, когда обработчик временно не работал: после исправления ошибки сбойные сообщения можно вернуть в обработку без потери данных.
Синтаксис
php bin/console messenger:failed:retry [id] [options]
Пример
Давайте сначала создадим сообщение и его обработчик. Класс сообщения:
<?php
namespace AppMessage;
class ArticleMessage
{
public function __construct(
public string $text,
) {
}
}
?>
Обработчик сообщения:
<?php
namespace AppMessageHandler;
use AppMessageArticleMessage;
use SymfonyComponentMessengerAttributeAsMessageHandler;
#[AsMessageHandler]
class ArticleMessageHandler
{
public function __invoke(ArticleMessage $message): void
{
if ($message->text === 'fail') {
throw new RuntimeException('handler failed');
}
echo $message->text . PHP_EOL;
}
}
?>
Отправим сообщение с текстом 'fail', чтобы
обработчик выбросил исключение и сообщение попало
в очередь failed:
php bin/console messenger:dispatch 'AppMessageArticleMessage' '{"text":"fail"}'
Теперь посмотрим список сбойных сообщений:
php bin/console messenger:failed:show
Результат выполнения команды:
------------------------ ---------------------- ---------- ----------------------
Failed messages for Message Id Class Error
------------------------ ---------------------- ---------- ----------------------
1 1234abcd-... ArticleMessage handler failed
------------------------ ---------------------- ---------- ----------------------
Пример
Давайте исправим обработчик, чтобы он не выбрасывал исключение для нашего сообщения:
<?php
namespace AppMessageHandler;
use AppMessageArticleMessage;
use SymfonyComponentMessengerAttributeAsMessageHandler;
#[AsMessageHandler]
class ArticleMessageHandler
{
public function __invoke(ArticleMessage $message): void
{
echo $message->text . PHP_EOL;
}
}
?>
Теперь повторим обработку сбойного сообщения по его ID:
php bin/console messenger:failed:retry 1
Результат выполнения команды:
"fail"
Пример
Давайте запустим команду без параметров, чтобы выбрать сбойные сообщения в интерактивном режиме:
php bin/console messenger:failed:retry
Команда покажет список сообщений и предложит выбрать, какие из них повторить. После выбора Symfony спросит подтверждение и выполнит повторную обработку.
Для пропуска всех сообщений, кроме первого, используйте
опцию --force, чтобы не отвечать на вопросы
интерактивно:
php bin/console messenger:failed:retry --force
Смотрите также
-
команда
messenger:failed:show,
которая показывает список сбойных сообщений -
команда
messenger:consume,
которая запускает обработку сообщений из очереди -
команда
messenger:stop-workers,
которая останавливает всех воркеров Messenger -
команда
messenger:stats,
которая показывает статистику по транспортам