Команда messenger:consume
Команда messenger:consume запускает worker, который слушает указанный транспорт и обрабатывает сообщения через соответствующие обработчики. Первым аргументом передаётся имя транспорта (например, async). Опция --limit ограничивает количество обрабатываемых сообщений, --time-limit задаёт время работы в секундах, --memory-limit - лимит памяти, а --failure-limit - число ошибок до остановки worker.
Синтаксис
php bin/console messenger:consume [transport] [options]
Пример
Давайте создадим сообщение и его обработчик:
<?php
namespace AppMessage;
class SmsMessage
{
public function __construct(
public string $text,
) {
}
}
?>
Теперь создадим обработчик для этого сообщения:
<?php
namespace AppMessageHandler;
use AppMessageSmsMessage;
use SymfonyComponentMessengerAttributeAsMessageHandler;
#[AsMessageHandler]
class SmsMessageHandler
{
public function __invoke(SmsMessage $message): void
{
echo 'Обработано сообщение: ' . $message->text;
}
}
?>
Отправим сообщение в очередь:
<?php
namespace AppController;
use AppMessageSmsMessage;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentMessengerMessageBusInterface;
use SymfonyComponentRoutingAttributeRoute;
class MessageController extends AbstractController
{
#[Route('/send', name: 'send_message')]
public function send(MessageBusInterface $bus): Response
{
$bus->dispatch(new SmsMessage('hello'));
return new Response('Сообщение отправлено');
}
}
?>
Теперь запустим worker для обработки очереди:
php bin/console messenger:consume async
Результат выполнения команды:
Обработано сообщение: hello
Пример
Давайте ограничим количество обрабатываемых сообщений и время работы worker:
php bin/console messenger:consume async --limit=10 --time-limit=60
Worker обработает не более 10 сообщений и остановится через 60 секунд.
Пример
Давайте запустим worker с ограничением памяти и остановкой при ошибках:
php bin/console messenger:consume async --memory-limit=128M --failure-limit=3
Worker остановится при превышении 128 МБ памяти или после 3 ошибок обработки.
Смотрите также
-
команда
messenger:stop-workers,
которая останавливает запущенные worker -
команда
messenger:failed:retry,
которая повторяет обработку неудачных сообщений -
команда
messenger:stats,
которая показывает статистику по транспортам -
команда
debug:messenger,
которая выводит список доступных обработчиков