Для подключения Symfony Messenger в свой проект вам нужно выполнить несколько шагов.
1. Установка зависимости
Для начала установите компонент symfony/messenger
с помощью Composer. Запустите команду:
composer require symfony/messenger
2. Регистрация бандла
Откройте файл config/bundles.php
и убедитесь, что у вас есть следующая строка:
SymfonyBundleMessengerBundleMessengerBundle::class => ['all' => true],
3. Конфигурация драйвера транспорта сообщений
В Symfony Messenger есть несколько встроенных драйверов для транспорта сообщений, таких как AMQP, Redis и Doctrine.
Для настройки драйвера выберите один из них, добавьте его параметры в файл config/packages/messenger.yaml
.
framework: messenger: transports: async: '%env(MESSENGER_TRANSPORT_DSN)%'
4. Определение обработчиков сообщений
Для обработки входящих сообщений вы должны определить соответствующие обработчики.
Создайте новый класс, который реализует интерфейс SymfonyComponentMessengerHandlerMessageHandlerInterface
и пометьте его атрибутом #[SymfonyComponentMessengerHandlerMessageHandler]
.
Например:
<?php namespace AppMessageHandler; use AppMessageMyMessage; #[SymfonyComponentMessengerHandlerMessageHandler] class MyMessageHandler implements SymfonyComponentMessengerHandlerMessageHandlerInterface { public function __invoke(MyMessage $message) { // Обработка сообщения } }
5. Определение маршрутов сообщений
Чтобы сообщения были доставлены к соответствующим обработчикам, вам нужно определить маршруты.
Создайте новый класс, который реализует интерфейс SymfonyComponentMessengerRoutingRouteLocatorInterface
.
Метод getRouteCollection()
должен вернуть коллекцию маршрутов.
Например:
<?php namespace AppMessage; use SymfonyComponentMessengerTransportReceiverRoutingRouteCollection; use SymfonyComponentMessengerTransportReceiverRoutingRouteLocatorInterface; class MessengerRouteLocator implements RouteLocatorInterface { public function getRouteCollection(): RouteCollection { $routeCollection = new RouteCollection(); $routeCollection->add('my_message', new SymfonyComponentMessengerTransportReceiverCallableReceiver(function ($message) { // Подходящий обработчик должен быть выбран на основе настроек маршрута // и передан выбранному обработчику. // Пример: return new MyMessageHandler($message); })); return $routeCollection; } }
6. Конфигурация маршрутизации
Откройте файл config/services.yaml
и добавьте следующую строку, чтобы зарегистрировать вновь созданный маршрутизатор:
services: AppMessageMessengerRouteLocator: tags: ['messenger.receiver_locator']
7. Отправка сообщений
Теперь вы можете отправить сообщения из своих контроллеров или сервисов, используя класс SymfonyComponentMessengerMessageBusInterface
.
Например:
<?php namespace AppController; use AppMessageMyMessage; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentMessengerMessageBusInterface; use SymfonyComponentRoutingAnnotationRoute; class MyController { #[Route('/send-message')] public function sendMessage(MessageBusInterface $messageBus): Response { $messageBus->dispatch(new MyMessage('Hello, Messenger!')); return new Response('Message sent!'); } }
Это основные шаги для успешного подключения и использования Symfony Messenger в вашем проекте. Теперь вы можете легко передавать сообщения и обрабатывать их с помощью обработчиков.