РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1345 of 1361 menu

Метод stop класса Worker

Метод stop класса Worker устанавливает флаг остановки воркера. После вызова этого метода воркер завершает обработку текущего сообщения и корректно останавливается, не забирая новые сообщения из транспорта. Метод принимает один параметр $returnCode - код возврата, который будет возвращён из метода run.

Синтаксис

public function stop(int $returnCode = 0): void

Пример

Давайте остановим воркер после обработки первого сообщения:

<?php namespace AppMessageHandler; use AppMessageArticleMessage; use SymfonyComponentMessengerHandlerMessageHandlerInterface; use SymfonyComponentMessengerWorker; class ArticleMessageHandler implements MessageHandlerInterface { private Worker $worker; public function __construct(Worker $worker) { $this->worker = $worker; } public function __invoke(ArticleMessage $message): void { echo $message->getText(); $this->worker->stop(); } } ?>

После обработки первого сообщения воркер завершит работу.

Пример

Давайте остановим воркер с кодом возврата 1 при возникновении ошибки:

<?php namespace AppMessageHandler; use AppMessageArticleMessage; use SymfonyComponentMessengerHandlerMessageHandlerInterface; use SymfonyComponentMessengerWorker; class ArticleMessageHandler implements MessageHandlerInterface { private Worker $worker; public function __construct(Worker $worker) { $this->worker = $worker; } public function __invoke(ArticleMessage $message): void { try { $res = $message->process(); echo $res; } catch (Exception $e) { $this->worker->stop(1); } } } ?>

Если при обработке сообщения возникнет исключение, воркер остановится и вернёт код 1.

Пример

Давайте запустим воркер вручную и остановим его через некоторое время:

<?php namespace AppCommand; use SymfonyComponentConsoleCommandCommand; use SymfonyComponentConsoleInputInputInterface; use SymfonyComponentConsoleOutputOutputInterface; use SymfonyComponentMessengerTransportReceiverInterface; use SymfonyComponentMessengerWorker; class WorkerCommand extends Command { protected static $defaultName = 'app:worker'; public function __construct( private ReceiverInterface $receiver, private Worker $worker ) { parent::__construct(); } protected function execute(InputInterface $input, OutputInterface $output): int { $output->writeln('Worker started'); $this->worker->stop(); $res = $this->worker->run(); return $res; } } ?>

Результат выполнения кода:

"Worker started"

Смотрите также

  • класс Worker,
    который обрабатывает сообщения из транспорта
  • метод run,
    который запускает обработку сообщений
  • метод getMetadata,
    который возвращает метаданные воркера
  • исключение StopWorkerException,
    которое останавливает воркер из обработчика
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить