В Symfony для добавления алиаса на шину сообщений используется конфигурационный файл config/packages/messenger.yaml
. Если файл отсутствует, то его необходимо создать.
Опишем процесс добавления алиаса на шину сообщений по шагам:
1. Создайте файл config/packages/messenger.yaml
, если его еще нет.
2. В этом файле определите конфигурацию шины сообщений, задав ей любое имя, например, message_bus
:
framework: messenger: buses: message_bus: default_middleware_chain: SymfonyComponentMessengerMiddlewareHandleMessageMiddleware
3. Далее определите алиас для созданной шины сообщений, используя параметр middleware_name_resolver
:
framework: messenger: buses: message_bus: default_middleware_chain: SymfonyComponentMessengerMiddlewareHandleMessageMiddleware middleware_name_resolver: AppMessageBusMessageBusNameResolver
4. Создайте класс MessageBusNameResolver
в директории src/MessageBus
:
namespace AppMessageBus; use SymfonyComponentMessengerStampBusNameStamp; use SymfonyComponentMessengerEnvelope; use SymfonyComponentMessengerMiddlewareStackInterface; use SymfonyComponentMessengerMiddlewareMiddlewareInterface; use SymfonyComponentMessengerMiddlewareMiddlewareStackInterface; use SymfonyComponentMessengerMiddlewareMiddlewareStackAwareInterface; class MessageBusNameResolver implements MiddlewareInterface, MiddlewareStackAwareInterface { private $stack; public function handle(Envelope $envelope, StackInterface $stack): Envelope { $envelope = $stack->next()->handle($envelope, $this->stack); if (null === $envelope->last(BusNameStamp::class)) { $envelope = $envelope->with(new BusNameStamp('message_bus')); } return $envelope; } public function setStack(MiddlewareStackInterface $stack): void { $this->stack = $stack; } }
5. Теперь у вас есть возможность использовать новую шину сообщений с алиасом message_bus
:
// ... use SymfonyComponentMessengerMessageBusInterface; class MyController extends AbstractController { private $messageBus; public function __construct(MessageBusInterface $messageBus) { $this->messageBus = $messageBus; } public function myAction() { // Отправка сообщения на шину сообщений с алиасом "message_bus" $this->messageBus->dispatch(new MyMessage()); } }
Теперь вы можете использовать созданную шину сообщений с алиасом message_bus
для отправки и обработки сообщений в вашем приложении Symfony.