Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
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 для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить