Метод run класса Worker
Метод run класса Worker запускает цикл
обработки сообщений. Он извлекает сообщения из
транспорта, передаёт их шине и выполняет
зарегистрированные обработчики. Первым параметром
можно передать массив опций, например sleep
для задержки между итерациями или limit
для ограничения количества обработанных сообщений.
Метод возвращает целое число - количество
обработанных сообщений.
Синтаксис
public function run(array $options = []): int
Пример
Давайте создадим воркер и запустим его с
ограничением в 1 сообщение:
<?php
namespace AppCommand;
use SymfonyComponentConsoleCommandCommand;
use SymfonyComponentConsoleInputInputInterface;
use SymfonyComponentConsoleOutputOutputInterface;
use SymfonyComponentMessengerTransportTransportInterface;
use SymfonyComponentMessengerWorker;
class WorkerCommand extends Command
{
protected static $defaultName = 'app:worker';
public function __construct(
private TransportInterface $transport
) {
parent::__construct();
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$worker = new Worker([$this->transport]);
$res = $worker->run(['limit' => 1]);
$output->writeln('Processed: ' . $res);
return Command::SUCCESS;
}
}
?>
Результат выполнения команды php bin/console app:worker:
Processed: 1
Пример
Давайте запустим воркер с задержкой между
итерациями в 1 секунду и остановим его
через 5 сообщений:
<?php
namespace AppCommand;
use SymfonyComponentConsoleCommandCommand;
use SymfonyComponentConsoleInputInputInterface;
use SymfonyComponentConsoleOutputOutputInterface;
use SymfonyComponentMessengerTransportTransportInterface;
use SymfonyComponentMessengerWorker;
class WorkerCommand extends Command
{
protected static $defaultName = 'app:worker';
public function __construct(
private TransportInterface $transport
) {
parent::__construct();
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$worker = new Worker([$this->transport]);
$res = $worker->run([
'sleep' => 1000000,
'limit' => 5,
]);
$output->writeln('Processed: ' . $res);
return Command::SUCCESS;
}
}
?>
Результат выполнения команды:
Processed: 5
Смотрите также
-
класс
Worker,
который управляет обработкой сообщений -
метод
stop,
который останавливает воркер -
метод
getMetadata,
который возвращает метаданные воркера -
класс
MessageBus,
который передаёт сообщения в шину