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

Класс Worker

Класс Worker запускает бесконечный цикл обработки сообщений из транспорта очереди. Он принимает сообщения из указанного транспорта, передаёт их шине MessageBus для выполнения и повторяет цикл до остановки. Первым параметром в конструктор передаётся массив транспортов, вторым - шина, третьим - логгер. Обычно класс используется внутри консольной команды messenger:consume, но его можно применять и напрямую.

Синтаксис

public function __construct( iterable $receivers, MessageBusInterface $bus, ?LoggerInterface $logger = null, )

Пример

Давайте создадим воркер и обработаем одно сообщение из транспорта 'async':

<?php namespace AppService; use SymfonyComponentMessengerMessageBusInterface; use SymfonyComponentMessengerTransportReceiverInterface; use SymfonyComponentMessengerWorker; use PsrLogLoggerInterface; class WorkerExample { public function __construct( private ReceiverInterface $receiver, private MessageBusInterface $bus, private LoggerInterface $logger, ) { } public function process(): void { $worker = new Worker( [$this->receiver], $this->bus, $this->logger, ); $worker->run([ 'sleep' => 1000000, ]); } } ?>

В консоль будет выведена информация об обработанных сообщениях.

Пример

Давайте создадим воркер и досрочно остановим его через метод stop:

<?php namespace AppService; use SymfonyComponentMessengerMessageBusInterface; use SymfonyComponentMessengerTransportReceiverInterface; use SymfonyComponentMessengerWorker; class WorkerStop { public function __construct( private ReceiverInterface $receiver, private MessageBusInterface $bus, ) { } public function process(): void { $worker = new Worker( [$this->receiver], $this->bus, ); $worker->stop(); $worker->run(); } } ?>

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

"worker stopped"

Пример

Давайте получим метаданные о работе воркера через метод getMetadata:

<?php namespace AppService; use SymfonyComponentMessengerMessageBusInterface; use SymfonyComponentMessengerTransportReceiverInterface; use SymfonyComponentMessengerWorker; class WorkerMetadata { public function __construct( private ReceiverInterface $receiver, private MessageBusInterface $bus, ) { } public function process(): array { $worker = new Worker( [$this->receiver], $this->bus, ); return $worker->getMetadata(); } } ?>

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

["idle", "running", "stopped"]

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

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