|
59 | 59 | use Symfony\Component\Lock\LockInterface; |
60 | 60 | use Symfony\Component\Lock\Store\StoreFactory; |
61 | 61 | use Symfony\Component\Lock\StoreInterface; |
| 62 | +use Symfony\Component\Messenger\Transport\ReceiverInterface; |
| 63 | +use Symfony\Component\Messenger\Transport\SenderInterface; |
62 | 64 | use Symfony\Component\PropertyAccess\PropertyAccessor; |
63 | 65 | use Symfony\Component\PropertyInfo\PropertyAccessExtractorInterface; |
64 | 66 | use Symfony\Component\PropertyInfo\PropertyDescriptionExtractorInterface; |
@@ -266,6 +268,12 @@ public function load(array $configs, ContainerBuilder $container) |
266 | 268 | $this->registerLockConfiguration($config['lock'], $container, $loader); |
267 | 269 | } |
268 | 270 |
|
| 271 | + if ($this->isConfigEnabled($container, $config['messenger'])) { |
| 272 | + $this->registerMessengerConfiguration($config['messenger'], $container, $loader); |
| 273 | + } else { |
| 274 | + $container->removeDefinition('console.command.messenger_consume_messages'); |
| 275 | + } |
| 276 | + |
269 | 277 | if ($this->isConfigEnabled($container, $config['web_link'])) { |
270 | 278 | if (!class_exists(HttpHeaderSerializer::class)) { |
271 | 279 | throw new LogicException('WebLink support cannot be enabled as the WebLink component is not installed.'); |
@@ -333,6 +341,10 @@ public function load(array $configs, ContainerBuilder $container) |
333 | 341 | ->addTag('validator.constraint_validator'); |
334 | 342 | $container->registerForAutoconfiguration(ObjectInitializerInterface::class) |
335 | 343 | ->addTag('validator.initializer'); |
| 344 | + $container->registerForAutoconfiguration(ReceiverInterface::class) |
| 345 | + ->addTag('messenger.receiver'); |
| 346 | + $container->registerForAutoconfiguration(SenderInterface::class) |
| 347 | + ->addTag('messenger.sender'); |
336 | 348 |
|
337 | 349 | if (!$container->getParameter('kernel.debug')) { |
338 | 350 | // remove tagged iterator argument for resource checkers |
@@ -1410,6 +1422,26 @@ private function registerLockConfiguration(array $config, ContainerBuilder $cont |
1410 | 1422 | } |
1411 | 1423 | } |
1412 | 1424 |
|
| 1425 | + private function registerMessengerConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader) |
| 1426 | + { |
| 1427 | + $loader->load('messenger.xml'); |
| 1428 | + |
| 1429 | + $senderLocatorMapping = array(); |
| 1430 | + $messageToSenderIdsMapping = array(); |
| 1431 | + foreach ($config['routing'] as $message => $messageConfiguration) { |
| 1432 | + foreach ($messageConfiguration['senders'] as $sender) { |
| 1433 | + if (null !== $sender) { |
| 1434 | + $senderLocatorMapping[$sender] = new Reference($sender); |
| 1435 | + } |
| 1436 | + } |
| 1437 | + |
| 1438 | + $messageToSenderIdsMapping[$message] = $messageConfiguration['senders']; |
| 1439 | + } |
| 1440 | + |
| 1441 | + $container->getDefinition('messenger.sender_locator')->replaceArgument(0, $senderLocatorMapping); |
| 1442 | + $container->getDefinition('messenger.asynchronous.routing.sender_locator')->replaceArgument(1, $messageToSenderIdsMapping); |
| 1443 | + } |
| 1444 | + |
1413 | 1445 | private function registerCacheConfiguration(array $config, ContainerBuilder $container) |
1414 | 1446 | { |
1415 | 1447 | $version = new Parameter('container.build_id'); |
|
0 commit comments