1414namespace FiveLab \Bundle \AmqpBundle \DependencyInjection ;
1515
1616use FiveLab \Bundle \AmqpBundle \Factory \DriverFactory ;
17+ use FiveLab \Bundle \AmqpBundle \Listener \PingDbalConnectionsListener ;
18+ use FiveLab \Bundle \AmqpBundle \Listener \ReleaseMemoryListener ;
1719use FiveLab \Component \Amqp \Channel \ChannelFactoryInterface ;
1820use FiveLab \Component \Amqp \Connection \ConnectionFactoryInterface ;
1921use FiveLab \Component \Amqp \Connection \Dsn ;
3335use FiveLab \Component \Amqp \Queue \Definition \Arguments \SingleActiveCustomerArgument ;
3436use FiveLab \Component \Amqp \Queue \QueueFactoryInterface ;
3537use Symfony \Component \Config \FileLocator ;
36- use Symfony \Component \DependencyInjection \Argument \ServiceClosureArgument ;
3738use Symfony \Component \DependencyInjection \ChildDefinition ;
3839use Symfony \Component \DependencyInjection \Compiler \ServiceLocatorTagPass ;
3940use Symfony \Component \DependencyInjection \ContainerBuilder ;
@@ -71,14 +72,16 @@ public function load(array $configs, ContainerBuilder $container): void
7172 $ loader ->load ('definitions.php ' );
7273 $ loader ->load ('consumers.php ' );
7374 $ loader ->load ('publishers.php ' );
75+ $ loader ->load ('listeners.php ' );
7476 $ loader ->load ('services.php ' );
7577
78+ $ this ->configureListeners ($ container , $ config ['listeners ' ]);
7679 $ this ->configureConnections ($ container , $ config ['connections ' ]);
7780 $ this ->configureChannels ($ container , $ config ['channels ' ]);
7881 $ this ->configureExchanges ($ container , $ config ['exchanges ' ]);
7982 $ this ->configureQueues ($ container , $ config ['queues ' ], $ config ['queue_default_arguments ' ] ?? []);
8083 $ this ->configurePublishers ($ container , $ config ['publishers ' ], $ config ['publisher_middleware ' ]);
81- $ this ->configureConsumers ($ container , $ config ['consumers ' ], $ config ['consumer_middleware ' ], $ config [ ' consumer_event_handlers ' ], $ config [ ' consumer_defaults ' ]);
84+ $ this ->configureConsumers ($ container , $ config ['consumers ' ], $ config ['consumer_defaults ' ]);
8285
8386 if ($ this ->isConfigEnabled ($ container , $ config ['round_robin ' ])) {
8487 $ loader ->load ('round-robin.php ' );
@@ -93,8 +96,6 @@ public function load(array $configs, ContainerBuilder $container): void
9396 $ container ,
9497 $ config ['delay ' ],
9598 $ config ['publisher_middleware ' ],
96- $ config ['consumer_middleware ' ],
97- $ config ['consumer_event_handlers ' ],
9899 $ config ['queue_default_arguments ' ] ?? [],
99100 $ config ['consumer_defaults ' ] ?? []
100101 );
@@ -132,6 +133,21 @@ private function setDefaultStrategy(array $config): array
132133 return $ config ;
133134 }
134135
136+ private function configureListeners (ContainerBuilder $ container , array $ listeners ): void
137+ {
138+ if (null !== $ listeners ['release_memory ' ]) {
139+ $ container ->getDefinition (ReleaseMemoryListener::class)
140+ ->setAbstract (false )
141+ ->replaceArgument (1 , $ listeners ['release_memory ' ]);
142+ }
143+
144+ if (null !== $ listeners ['ping_dbal_connections ' ]) {
145+ $ container ->getDefinition (PingDbalConnectionsListener::class)
146+ ->setAbstract (false )
147+ ->replaceArgument (1 , $ listeners ['ping_dbal_connections ' ]);
148+ }
149+ }
150+
135151 private function configureConnections (ContainerBuilder $ container , array $ connections ): void
136152 {
137153 $ registryDef = $ container ->getDefinition ('fivelab.amqp.connection_factory_registry ' );
@@ -517,7 +533,7 @@ private function configureQueues(ContainerBuilder $container, array $queues, arr
517533 $ container ->setParameter ('fivelab.amqp.queue_factories ' , \array_keys ($ this ->queueFactories ));
518534 }
519535
520- private function configureConsumers (ContainerBuilder $ container , array $ consumers , array $ globalMiddlewares , array $ eventHandlers , array $ defaults ): void
536+ private function configureConsumers (ContainerBuilder $ container , array $ consumers , array $ defaults ): void
521537 {
522538 $ consumerRegistryDef = $ container ->getDefinition ('fivelab.amqp.consumer_registry ' );
523539 $ checkConsumerRegistryDef = $ container ->getDefinition ('fivelab.amqp.consumer_checker_registry ' );
@@ -574,19 +590,6 @@ private function configureConsumers(ContainerBuilder $container, array $consumer
574590 $ queueFactoryServiceId = $ this ->queueFactories [$ consumer ['queue ' ]];
575591 }
576592
577- // Configure middleware for consumer
578- $ consumerMiddlewares = \array_merge ($ globalMiddlewares , $ consumer ['middleware ' ]);
579-
580- $ middlewareList = \array_map (static function (string $ serviceId ) {
581- return new Reference ($ serviceId );
582- }, $ consumerMiddlewares );
583-
584- $ middlewareServiceId = \sprintf ('fivelab.amqp.consumer.%s.middlewares ' , $ key );
585- $ middlewareServiceDef = new ChildDefinition ('fivelab.amqp.consumer.middlewares.abstract ' );
586- $ middlewareServiceDef ->setArguments ($ middlewareList );
587-
588- $ container ->setDefinition ($ middlewareServiceId , $ middlewareServiceDef );
589-
590593 // Configure message handler for consumer
591594 $ messageHandlersServiceId = \sprintf ('fivelab.amqp.consumer.%s.message_handler ' , $ key );
592595 $ messageHandlersServiceDef = new ChildDefinition ('fivelab.amqp.consumer.message_handler.abstract ' );
@@ -642,9 +645,8 @@ private function configureConsumers(ContainerBuilder $container, array $consumer
642645 $ consumerServiceDef
643646 ->replaceArgument (0 , new Reference ($ queueFactoryServiceId ))
644647 ->replaceArgument (1 , new Reference ($ messageHandlersServiceId ))
645- ->replaceArgument (2 , new Reference ($ middlewareServiceId ))
646- ->replaceArgument (3 , new Reference ($ consumerConfigurationServiceId ))
647- ->replaceArgument (4 , new Reference ($ strategyServiceId ));
648+ ->replaceArgument (2 , new Reference ($ consumerConfigurationServiceId ))
649+ ->replaceArgument (3 , new Reference ($ strategyServiceId ));
648650 } elseif ('spool ' === $ consumer ['mode ' ]) {
649651 // Configure spool consumer
650652 $ consumerConfigurationServiceId = \sprintf ('fivelab.amqp.consumer.%s.configuration ' , $ key );
@@ -662,9 +664,8 @@ private function configureConsumers(ContainerBuilder $container, array $consumer
662664 $ consumerServiceDef
663665 ->replaceArgument (0 , new Reference ($ queueFactoryServiceId ))
664666 ->replaceArgument (1 , new Reference ($ messageHandlersServiceId ))
665- ->replaceArgument (2 , new Reference ($ middlewareServiceId ))
666- ->replaceArgument (3 , new Reference ($ consumerConfigurationServiceId ))
667- ->replaceArgument (4 , new Reference ($ strategyServiceId ));
667+ ->replaceArgument (2 , new Reference ($ consumerConfigurationServiceId ))
668+ ->replaceArgument (3 , new Reference ($ strategyServiceId ));
668669 } elseif ('loop ' === $ consumer ['mode ' ]) {
669670 $ consumerConfigurationServiceId = \sprintf ('fivelab.amqp.consumer.%s.configuration ' , $ key );
670671 $ consumerConfigurationServiceDef = new ChildDefinition ('fivelab.amqp.consumer_loop.configuration.abstract ' );
@@ -680,23 +681,15 @@ private function configureConsumers(ContainerBuilder $container, array $consumer
680681 $ consumerServiceDef
681682 ->replaceArgument (0 , new Reference ($ queueFactoryServiceId ))
682683 ->replaceArgument (1 , new Reference ($ messageHandlersServiceId ))
683- ->replaceArgument (2 , new Reference ($ middlewareServiceId ))
684- ->replaceArgument (3 , new Reference ($ consumerConfigurationServiceId ))
685- ->replaceArgument (4 , new Reference ($ strategyServiceId ));
684+ ->replaceArgument (2 , new Reference ($ consumerConfigurationServiceId ))
685+ ->replaceArgument (3 , new Reference ($ strategyServiceId ));
686686 } else {
687687 throw new \InvalidArgumentException (\sprintf (
688688 'Unknown mode "%s". ' ,
689689 $ consumer ['mode ' ]
690690 ));
691691 }
692692
693- foreach ($ eventHandlers as $ eventHandler ) {
694- $ consumerServiceDef ->addMethodCall (
695- 'addEventHandler ' ,
696- [new ServiceClosureArgument (new Reference ($ eventHandler )), true ]
697- );
698- }
699-
700693 $ container ->setDefinition ($ consumerConfigurationServiceId , $ consumerConfigurationServiceDef );
701694 $ container ->setDefinition ($ consumerServiceId , $ consumerServiceDef );
702695
@@ -830,7 +823,7 @@ private function configureRoundRobin(ContainerBuilder $container, array $config)
830823 ->replaceArgument (2 , \array_keys ($ this ->consumers ));
831824 }
832825
833- private function configureDelay (ContainerBuilder $ container , array $ config , array $ globalPublisherMiddlewares , array $ globalConsumerMiddlewares , array $ consumerEventHandlers , array $ queueDefaultArguments , array $ consumerDefaults ): void
826+ private function configureDelay (ContainerBuilder $ container , array $ config , array $ globalPublisherMiddlewares , array $ queueDefaultArguments , array $ consumerDefaults ): void
834827 {
835828 // Configure exchange
836829 $ this ->configureExchanges ($ container , [
@@ -949,7 +942,7 @@ private function configureDelay(ContainerBuilder $container, array $config, arra
949942 'idle_timeout ' => 100000 ,
950943 ],
951944 ],
952- ], $ globalConsumerMiddlewares , $ consumerEventHandlers , $ consumerDefaults );
945+ ], $ consumerDefaults );
953946 }
954947
955948 private function createArgumentDefinition (ContainerBuilder $ container , string $ serviceId , string $ class , mixed ...$ values ): Reference
0 commit comments