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

Параметр fromTransport атрибута AsMessageHandler

Параметр fromTransport атрибута AsMessageHandler задаёт имя транспорта, из которого должно быть получено сообщение. Если сообщение приходит из другого транспорта, обработчик не будет вызван. Это позволяет одному и тому же классу сообщения иметь разные обработчики для разных транспортов.

Синтаксис

#[AsMessageHandler(fromTransport: transport)]

Пример

Давайте создадим сообщение и обработчик, который принимает только сообщения из транспорта async:

<?php namespace App\Message; class ArticleMessage { public function __construct( public string $text, ) { } } ?>
<?php namespace App\MessageHandler; use App\Message\ArticleMessage; use Symfony\Component\Messenger\Attribute\AsMessageHandler; #[AsMessageHandler(fromTransport: 'async')] class ArticleMessageHandler { public function __invoke(ArticleMessage $message): void { echo $message->text; } } ?>

Если отправить сообщение в транспорт async, обработчик будет вызван и выведет текст сообщения:

"abcde"

Пример

Давайте создадим два обработчика для одного сообщения: один принимает сообщения из транспорта async, а второй - из транспорта sync:

<?php namespace App\Message; class UserMessage { public function __construct( public string $name, ) { } } ?>
<?php namespace App\MessageHandler; use App\Message\UserMessage; use Symfony\Component\Messenger\Attribute\AsMessageHandler; #[AsMessageHandler(fromTransport: 'async')] class AsyncUserMessageHandler { public function __invoke(UserMessage $message): void { echo 'async: ' . $message->name; } } ?>
<?php namespace App\MessageHandler; use App\Message\UserMessage; use Symfony\Component\Messenger\Attribute\AsMessageHandler; #[AsMessageHandler(fromTransport: 'sync')] class SyncUserMessageHandler { public function __invoke(UserMessage $message): void { echo 'sync: ' . $message->name; } } ?>

Если отправить сообщение в транспорт async, будет вызван первый обработчик:

"async: user"

Если отправить сообщение в транспорт sync, будет вызван второй обработчик:

"sync: user"

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

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