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

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

Параметр bus атрибута AsMessageHandler привязывает обработчик сообщения к конкретной шине сообщений. По умолчанию Symfony использует шину default (или messenger.bus.default), но если в проекте объявлено несколько шин, параметр позволяет явно указать, какую именно шину должен обслуживать данный обработчик.

Значением параметра выступает имя шины, заданное в конфигурации framework.messenger.buses. Если параметр не указан, обработчик попадает в шину по умолчанию.

Синтаксис

#[AsMessageHandler(bus: 'bus_name')]

Пример

Давайте создадим класс-сообщение UserMessage и обработчик, привязанный к шине 'command.bus':

<?php namespace App\Message; class UserMessage { public function __construct( public string $text ) { } } ?>
<?php namespace App\MessageHandler; use App\Message\UserMessage; use Symfony\Component\Messenger\Attribute\AsMessageHandler; #[AsMessageHandler(bus: 'command.bus')] class UserMessageHandler { public function __invoke(UserMessage $message): void { echo $message->text; } } ?>

Обработчик сработает только тогда, когда сообщение UserMessage будет отправлено в шину 'command.bus'.

Пример

Давайте создадим две шины и два обработчика, каждый из которых привязан к своей шине:

framework: messenger: buses: command.bus: ~ query.bus: ~
<?php namespace App\MessageHandler; use App\Message\UserMessage; use Symfony\Component\Messenger\Attribute\AsMessageHandler; #[AsMessageHandler(bus: 'command.bus')] class CommandMessageHandler { public function __invoke(UserMessage $message): void { echo 'command: ' . $message->text; } } ?>
<?php namespace App\MessageHandler; use App\Message\UserMessage; use Symfony\Component\Messenger\Attribute\AsMessageHandler; #[AsMessageHandler(bus: 'query.bus')] class QueryMessageHandler { public function __invoke(UserMessage $message): void { echo 'query: ' . $message->text; } } ?>

Теперь отправим сообщение в шину 'query.bus' из контроллера:

<?php namespace App\Controller; use App\Message\UserMessage; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Messenger\MessageBusInterface; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/', name: 'article_index')] public function index(MessageBusInterface $queryBus): Response { $queryBus->dispatch(new UserMessage('abcde')); return new Response('done'); } } ?>

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

query: abcde

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

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