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
251252private 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
256265foreach ($ container ->findTaggedServiceIds ($ this ->receiverTag )as $ id =>$ tags ) {
257266$ receiverClass =$ this ->getServiceClass ($ container ,$ id );
258267
259268$ tag =current ($ tags );
260269if (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
264273if (!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)
314327foreach ($ failedCommandIdsas $ failedCommandId ) {
315328if ($ container ->hasDefinition ($ failedCommandId )) {
316329$ definition =$ container ->getDefinition ($ failedCommandId );
317- $ definition ->replaceArgument (1 ,$ receiverMapping [ $ definition -> getArgument ( 0 )] );
330+ $ definition ->replaceArgument (1 ,$ failureTransportsLocator );
318331 }
319332 }
320333 }