@@ -2102,6 +2102,7 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
21022102
21032103 $ senderAliases = [];
21042104 $ transportRetryReferences = [];
2105+ $ transportRateLimiterReferences = [];
21052106 foreach ($ config ['transports ' ] as $ name => $ transport ) {
21062107 $ serializerId = $ transport ['serializer ' ] ?? 'messenger.default_serializer ' ;
21072108 $ transportDefinition = (new Definition (TransportInterface::class))
@@ -2130,6 +2131,14 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
21302131
21312132 $ transportRetryReferences [$ name ] = new Reference ($ retryServiceId );
21322133 }
2134+
2135+ if ($ transport ['rate_limiter ' ]) {
2136+ if (!interface_exists (LimiterInterface::class)) {
2137+ throw new LogicException ('Rate limiter cannot be used within Messenger as the RateLimiter component is not installed. Try running "composer require symfony/rate-limiter". ' );
2138+ }
2139+
2140+ $ transportRateLimiterReferences [$ name ] = new Reference ('limiter. ' .$ transport ['rate_limiter ' ]);
2141+ }
21332142 }
21342143
21352144 $ senderReferences = [];
@@ -2184,6 +2193,13 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
21842193 $ container ->getDefinition ('messenger.retry_strategy_locator ' )
21852194 ->replaceArgument (0 , $ transportRetryReferences );
21862195
2196+ if (!$ transportRateLimiterReferences ) {
2197+ $ container ->removeDefinition ('messenger.rate_limiter_locator ' );
2198+ } else {
2199+ $ container ->getDefinition ('messenger.rate_limiter_locator ' )
2200+ ->replaceArgument (0 , $ transportRateLimiterReferences );
2201+ }
2202+
21872203 if (\count ($ failureTransports ) > 0 ) {
21882204 $ container ->getDefinition ('console.command.messenger_failed_messages_retry ' )
21892205 ->replaceArgument (0 , $ config ['failure_transport ' ]);
0 commit comments