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

Транспорт sync

Транспорт sync - это встроенный транспорт Symfony Messenger, который выполняет обработку сообщения немедленно, прямо во время вызова метода dispatch. Сообщение не попадает в очередь и не требует запуска воркера. Транспорт удобен для отладки, а также для задач, которые должны быть выполнены синхронно в рамках текущего запроса. В конфигурации он задаётся секцией framework.messenger.transports.sync.

Синтаксис

framework: messenger: transports: sync: 'sync://'

Пример

Давайте настроим транспорт sync в конфигурации Messenger:

framework: messenger: transports: sync: 'sync://'

Теперь отправим сообщение в этот транспорт через атрибут AsMessageHandler и метод dispatch:

<?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] class ArticleMessageHandler { public function __invoke(ArticleMessage $message): void { echo $message->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\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/', name: 'article_index')] public function index(MessageBusInterface $bus): Response { $bus->dispatch(new ArticleMessage('hello')); return new Response('sent'); } } ?>

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

"hello"

Пример

Давайте явно укажем транспорт sync при отправке сообщения через стамп TransportNamesStamp:

<?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\Stamp\TransportNamesStamp; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/', name: 'article_index')] public function index(MessageBusInterface $bus): Response { $bus->dispatch( new ArticleMessage('abcde'), [new TransportNamesStamp(['sync'])] ); return new Response('done'); } } ?>

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

"abcde"

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

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