From c965e4e8440f162e3f77fb7c75c2ed9f71e9dead Mon Sep 17 00:00:00 2001 From: Ruud Kamphuis Date: Sat, 24 Aug 2019 11:05:28 +0200 Subject: [PATCH] [Messenger] Added support for `from_transport` attribute on `messenger.message_handler` tag --- src/Symfony/Component/Messenger/CHANGELOG.md | 1 + .../DependencyInjection/MessengerPass.php | 4 ++++ .../DependencyInjection/MessengerPassTest.php | 19 +++++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/src/Symfony/Component/Messenger/CHANGELOG.md b/src/Symfony/Component/Messenger/CHANGELOG.md index 90128ab61d..7a438586cc 100644 --- a/src/Symfony/Component/Messenger/CHANGELOG.md +++ b/src/Symfony/Component/Messenger/CHANGELOG.md @@ -9,6 +9,7 @@ CHANGELOG * Added support for auto trimming of Redis streams. * `InMemoryTransport` handle acknowledged and rejected messages. * Made all dispatched worker event classes final. + * Added support for `from_transport` attribute on `messenger.message_handler` tag. 4.3.0 ----- diff --git a/src/Symfony/Component/Messenger/DependencyInjection/MessengerPass.php b/src/Symfony/Component/Messenger/DependencyInjection/MessengerPass.php index f0d37c4e80..40ddeef1a2 100644 --- a/src/Symfony/Component/Messenger/DependencyInjection/MessengerPass.php +++ b/src/Symfony/Component/Messenger/DependencyInjection/MessengerPass.php @@ -109,6 +109,10 @@ class MessengerPass implements CompilerPassInterface $options = ['method' => $options]; } + if (!isset($options['from_transport']) && isset($tag['from_transport'])) { + $options['from_transport'] = $tag['from_transport']; + } + $priority = $tag['priority'] ?? $options['priority'] ?? 0; $method = $options['method'] ?? '__invoke'; diff --git a/src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php b/src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php index c50a70ea77..1c42c39f82 100644 --- a/src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php +++ b/src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php @@ -78,6 +78,25 @@ class MessengerPassTest extends TestCase ); } + public function testFromTransportViaTagAttribute() + { + $container = $this->getContainerBuilder($busId = 'message_bus'); + $container + ->register(DummyHandler::class, DummyHandler::class) + ->addTag('messenger.message_handler', ['from_transport' => 'async']) + ; + + (new MessengerPass())->process($container); + + $handlersLocatorDefinition = $container->getDefinition($busId.'.messenger.handlers_locator'); + $this->assertSame(HandlersLocator::class, $handlersLocatorDefinition->getClass()); + + $handlerDescriptionMapping = $handlersLocatorDefinition->getArgument(0); + $this->assertCount(1, $handlerDescriptionMapping); + + $this->assertHandlerDescriptor($container, $handlerDescriptionMapping, DummyMessage::class, [DummyHandler::class], [['from_transport' => 'async']]); + } + public function testProcessHandlersByBus() { $container = $this->getContainerBuilder($commandBusId = 'command_bus');