@@ -2102,6 +2102,7 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
2102
2102
2103
2103
$ senderAliases = [];
2104
2104
$ transportRetryReferences = [];
2105
+ $ transportRateLimiterReferences = [];
2105
2106
foreach ($ config ['transports ' ] as $ name => $ transport ) {
2106
2107
$ serializerId = $ transport ['serializer ' ] ?? 'messenger.default_serializer ' ;
2107
2108
$ transportDefinition = (new Definition (TransportInterface::class))
@@ -2130,6 +2131,14 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
2130
2131
2131
2132
$ transportRetryReferences [$ name ] = new Reference ($ retryServiceId );
2132
2133
}
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
+ }
2133
2142
}
2134
2143
2135
2144
$ senderReferences = [];
@@ -2184,6 +2193,13 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
2184
2193
$ container ->getDefinition ('messenger.retry_strategy_locator ' )
2185
2194
->replaceArgument (0 , $ transportRetryReferences );
2186
2195
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
+
2187
2203
if (\count ($ failureTransports ) > 0 ) {
2188
2204
$ container ->getDefinition ('console.command.messenger_failed_messages_retry ' )
2189
2205
->replaceArgument (0 , $ config ['failure_transport ' ]);
0 commit comments