В Symfony для добавления алиаса на шину сообщений используется конфигурационный файл config/packages/messenger.yaml
. Если файл отсутствует, то его необходимо создать.
Опишем процесс добавления алиаса на шину сообщений по шагам:
- Создайте файл
config/packages/messenger.yaml
, если его еще нет.
- В этом файле определите конфигурацию шины сообщений, задав ей любое имя, например,
message_bus
:
framework: messenger: buses: message_bus: default_middleware_chain: SymfonyComponentMessengerMiddlewareHandleMessageMiddleware
- Далее определите алиас для созданной шины сообщений, используя параметр
middleware_name_resolver
:
framework: messenger: buses: message_bus: default_middleware_chain: SymfonyComponentMessengerMiddlewareHandleMessageMiddleware middleware_name_resolver: AppMessageBusMessageBusNameResolver
- Создайте класс
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; } }
- Теперь у вас есть возможность использовать новую шину сообщений с алиасом
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.