1919use Symfony \Component \DependencyInjection \Definition ;
2020use Symfony \Component \DependencyInjection \Exception \RuntimeException ;
2121use Symfony \Component \DependencyInjection \Reference ;
22+ use Symfony \Component \DependencyInjection \ServiceLocator ;
2223use Symfony \Component \Messenger \Handler \HandlerDescriptor ;
2324use Symfony \Component \Messenger \Handler \HandlersLocator ;
2425use Symfony \Component \Messenger \Handler \MessageSubscriberInterface ;
@@ -251,14 +252,22 @@ private function guessHandledClasses(\ReflectionClass $handlerClass, string $ser
251252 private function registerReceivers (ContainerBuilder $ container , array $ busIds )
252253 {
253254 $ receiverMapping = [];
254- $ failureTransportsMapping = [];
255+ $ failureTransportsMap = [];
256+
257+ $ globalFailureTransportId = 'messenger.failure_transports.default ' ;
258+ if ($ container ->hasAlias ($ globalFailureTransportId )) {
259+ $ globalFailureTransport = (string ) $ container ->getAlias ($ globalFailureTransportId );
260+ if ($ globalFailureTransport !== null ) {
261+ $ failureTransportsMap [$ globalFailureTransport ] = new Reference ('messenger.transport. ' . $ globalFailureTransport );
262+ }
263+ }
255264
256265 foreach ($ container ->findTaggedServiceIds ($ this ->receiverTag ) as $ id => $ tags ) {
257266 $ receiverClass = $ this ->getServiceClass ($ container , $ id );
258267
259268 $ tag = current ($ tags );
260269 if (isset ($ tag ['failure_transport ' ]) && $ tag ['failure_transport ' ] !== null ) {
261- $ failureTransportsMapping [$ tag ['failure_transport ' ]] = new Reference ($ tag ['failure_transport ' ]);
270+ $ failureTransportsMap [$ tag ['failure_transport ' ]] = new Reference (' messenger.transport. ' . $ tag ['failure_transport ' ]);
262271 }
263272
264273 if (!is_subclass_of ($ receiverClass , ReceiverInterface::class)) {
@@ -305,7 +314,11 @@ private function registerReceivers(ContainerBuilder $container, array $busIds)
305314 }
306315
307316 $ container ->getDefinition ('messenger.receiver_locator ' )->replaceArgument (0 , $ receiverMapping );
308-
317+
318+ $ failureTransportsLocator = (new Definition (ServiceLocator::class))
319+ ->addArgument ($ failureTransportsMap )
320+ ->addTag ('container.service_locator ' );
321+
309322 $ failedCommandIds = [
310323 'console.command.messenger_failed_messages_retry ' ,
311324 'console.command.messenger_failed_messages_show ' ,
@@ -314,7 +327,7 @@ private function registerReceivers(ContainerBuilder $container, array $busIds)
314327 foreach ($ failedCommandIds as $ failedCommandId ) {
315328 if ($ container ->hasDefinition ($ failedCommandId )) {
316329 $ definition = $ container ->getDefinition ($ failedCommandId );
317- $ definition ->replaceArgument (1 , $ receiverMapping [ $ definition -> getArgument ( 0 )] );
330+ $ definition ->replaceArgument (1 , $ failureTransportsLocator );
318331 }
319332 }
320333 }
0 commit comments