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

Метод dispatch класса MessageBus

Метод dispatch класса MessageBus отправляет сообщение в шину сообщений. Первым параметром передаётся объект сообщения, который нужно обработать. Вторым параметром можно передать массив штампов StampInterface, добавляющих к сообщению дополнительные данные. Метод возвращает объект Envelope с результатами обработки.

Синтаксис

public function dispatch(object $message, array $stamps = []): Envelope

Пример

Давайте создадим класс сообщения SendEmailMessage и отправим его в шину через метод dispatch:

<?php namespace AppMessage; class SendEmailMessage { public function __construct( public string $email, public string $text ) { } } ?>

Теперь вызовем метод dispatch в контроллере:

<?php namespace AppController; use AppMessageSendEmailMessage; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentMessengerMessageBusInterface; use SymfonyComponentRoutingAttributeRoute; class MessageController extends AbstractController { #[Route('/message', name: 'message_send')] public function send(MessageBusInterface $bus): Response { $message = new SendEmailMessage('abcde', 'hello'); $envelope = $bus->dispatch($message); return new Response('message sent'); } } ?>

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

"message sent"

Пример

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

<?php namespace AppController; use AppMessageSendEmailMessage; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentMessengerMessageBusInterface; use SymfonyComponentMessengerStampDelayStamp; use SymfonyComponentRoutingAttributeRoute; class MessageController extends AbstractController { #[Route('/message/delayed', name: 'message_delayed')] public function delayed(MessageBusInterface $bus): Response { $message = new SendEmailMessage('abcde', 'hello'); $envelope = $bus->dispatch($message, [ new DelayStamp(5000) ]); return new Response('message delayed'); } } ?>

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

"message delayed"

Пример

Давайте отправим сообщение в конкретный транспорт через штамп TransportNamesStamp:

<?php namespace AppController; use AppMessageSendEmailMessage; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentMessengerMessageBusInterface; use SymfonyComponentMessengerStampTransportNamesStamp; use SymfonyComponentRoutingAttributeRoute; class MessageController extends AbstractController { #[Route('/message/transport', name: 'message_transport')] public function transport(MessageBusInterface $bus): Response { $message = new SendEmailMessage('abcde', 'hello'); $envelope = $bus->dispatch($message, [ new TransportNamesStamp(['async']) ]); return new Response('message routed'); } } ?>

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

"message routed"

Пример

Давайте получим результат обработки из конверта через метод last и штамп HandledStamp:

<?php namespace AppController; use AppMessageSendEmailMessage; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentMessengerMessageBusInterface; use SymfonyComponentMessengerStampHandledStamp; use SymfonyComponentRoutingAttributeRoute; class MessageController extends AbstractController { #[Route('/message/handled', name: 'message_handled')] public function handled(MessageBusInterface $bus): Response { $message = new SendEmailMessage('abcde', 'hello'); $envelope = $bus->dispatch($message); $stamp = $envelope->last(HandledStamp::class); $res = $stamp->getResult(); return new Response($res); } } ?>

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

"email sent"

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

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