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

Класс RoutedMessage

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

Синтаксис

new RoutedMessage(object $message, array $transportNames)

Пример

Давайте создадим класс сообщения и обернём его в RoutedMessage с указанием транспорта 'async':

<?php namespace App\Message; class ArticleMessage { public function __construct( private string $text, ) { } public function getText(): string { return $this->text; } } ?>

Теперь обернём это сообщение и передадим его в шину:

<?php namespace App\Controller; use App\Message\ArticleMessage; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Messenger\MessageBusInterface; use Symfony\Component\Messenger\RoutedMessage; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article', name: 'article_send')] public function send(MessageBusInterface $bus): Response { $message = new ArticleMessage('hello'); $routed = new RoutedMessage($message, ['async']); $bus->dispatch($routed); return new Response('sent'); } } ?>

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

"sent"

Пример

Давайте укажем несколько транспортов одновременно:

<?php namespace App\Controller; use App\Message\ArticleMessage; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Messenger\MessageBusInterface; use Symfony\Component\Messenger\RoutedMessage; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/multi', name: 'article_multi')] public function multi(MessageBusInterface $bus): Response { $message = new ArticleMessage('abcde'); $routed = new RoutedMessage( $message, ['async', 'audit'], ); $bus->dispatch($routed); return new Response('routed'); } } ?>

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

"routed"

В этом случае сообщение будет отправлено сразу в оба транспорта 'async' и 'audit'.

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

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