@@ -1616,27 +1616,18 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
1616
1616
$ container ->setAlias ('messenger.default_serializer ' , $ config ['serializer ' ]['default_serializer ' ]);
1617
1617
}
1618
1618
1619
- $ senderReferences = [];
1620
- $ syncTransports = [];
1619
+ $ senderAliases = [];
1621
1620
$ transportRetryReferences = [];
1622
1621
foreach ($ config ['transports ' ] as $ name => $ transport ) {
1623
1622
$ serializerId = $ transport ['serializer ' ] ?? 'messenger.default_serializer ' ;
1624
1623
1625
- if (0 === strpos ($ transport ['dsn ' ], 'sync:// ' )) {
1626
- $ syncTransports [] = $ name ;
1627
- } else {
1628
- $ transportDefinition = (new Definition (TransportInterface::class))
1629
- ->setFactory ([new Reference ('messenger.transport_factory ' ), 'createTransport ' ])
1630
- ->setArguments ([$ transport ['dsn ' ], $ transport ['options ' ] + ['transport_name ' => $ name ], new Reference ($ serializerId )])
1631
- ->addTag ('messenger.receiver ' , ['alias ' => $ name ])
1632
- ;
1633
- $ container ->setDefinition ($ transportId = 'messenger.transport. ' .$ name , $ transportDefinition );
1634
-
1635
- // alias => service_id
1636
- $ senderReferences [$ name ] = new Reference ($ transportId );
1637
- // service_id => service_id
1638
- $ senderReferences [$ transportId ] = new Reference ($ transportId );
1639
- }
1624
+ $ transportDefinition = (new Definition (TransportInterface::class))
1625
+ ->setFactory ([new Reference ('messenger.transport_factory ' ), 'createTransport ' ])
1626
+ ->setArguments ([$ transport ['dsn ' ], $ transport ['options ' ] + ['transport_name ' => $ name ], new Reference ($ serializerId )])
1627
+ ->addTag ('messenger.receiver ' , ['alias ' => $ name ])
1628
+ ;
1629
+ $ container ->setDefinition ($ transportId = 'messenger.transport. ' .$ name , $ transportDefinition );
1630
+ $ senderAliases [$ name ] = $ transportId ;
1640
1631
1641
1632
if (null !== $ transport ['retry_strategy ' ]['service ' ]) {
1642
1633
$ transportRetryReferences [$ name ] = new Reference ($ transport ['retry_strategy ' ]['service ' ]);
@@ -1654,41 +1645,55 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
1654
1645
}
1655
1646
}
1656
1647
1648
+ $ senderReferences = [];
1649
+ // alias => service_id
1650
+ foreach ($ senderAliases as $ alias => $ serviceId ) {
1651
+ $ senderReferences [$ alias ] = new Reference ($ serviceId );
1652
+ }
1653
+ // service_id => service_id
1654
+ foreach ($ senderAliases as $ serviceId ) {
1655
+ $ senderReferences [$ serviceId ] = new Reference ($ serviceId );
1656
+ }
1657
+
1657
1658
$ messageToSendersMapping = [];
1658
1659
foreach ($ config ['routing ' ] as $ message => $ messageConfiguration ) {
1659
1660
if ('* ' !== $ message && !class_exists ($ message ) && !interface_exists ($ message , false )) {
1660
1661
throw new LogicException (sprintf ('Invalid Messenger routing configuration: class or interface "%s" not found. ' , $ message ));
1661
1662
}
1662
1663
1663
- // filter out "sync" senders
1664
- $ realSenders = [];
1664
+ // make sure senderAliases contains all senders
1665
1665
foreach ($ messageConfiguration ['senders ' ] as $ sender ) {
1666
- if (isset ($ senderReferences [$ sender ])) {
1667
- $ realSenders [] = $ sender ;
1668
- } elseif (!\in_array ($ sender , $ syncTransports , true )) {
1666
+ if (!isset ($ senderReferences [$ sender ])) {
1669
1667
throw new LogicException (sprintf ('Invalid Messenger routing configuration: the "%s" class is being routed to a sender called "%s". This is not a valid transport or service id. ' , $ message , $ sender ));
1670
1668
}
1671
1669
}
1672
1670
1673
- if ($ realSenders ) {
1674
- $ messageToSendersMapping [$ message ] = $ realSenders ;
1675
- }
1671
+ $ messageToSendersMapping [$ message ] = $ messageConfiguration ['senders ' ];
1676
1672
}
1677
1673
1674
+ $ sendersServiceLocator = ServiceLocatorTagPass::register ($ container , $ senderReferences );
1675
+
1678
1676
$ container ->getDefinition ('messenger.senders_locator ' )
1679
1677
->replaceArgument (0 , $ messageToSendersMapping )
1680
- ->replaceArgument (1 , ServiceLocatorTagPass::register ($ container , $ senderReferences ))
1678
+ ->replaceArgument (1 , $ sendersServiceLocator )
1679
+ ;
1680
+
1681
+ $ container ->getDefinition ('messenger.retry.send_failed_message_for_retry_listener ' )
1682
+ ->replaceArgument (0 , $ sendersServiceLocator )
1681
1683
;
1682
1684
1683
1685
$ container ->getDefinition ('messenger.retry_strategy_locator ' )
1684
1686
->replaceArgument (0 , $ transportRetryReferences );
1685
1687
1686
1688
if ($ config ['failure_transport ' ]) {
1689
+ if (!isset ($ senderReferences [$ config ['failure_transport ' ]])) {
1690
+ throw new LogicException (sprintf ('Invalid Messenger configuration: the failure transport "%s" is not a valid transport or service id. ' , $ config ['failure_transport ' ]));
1691
+ }
1692
+
1687
1693
$ container ->getDefinition ('messenger.failure.send_failed_message_to_failure_transport_listener ' )
1688
- ->replaceArgument (1 , $ config ['failure_transport ' ]);
1694
+ ->replaceArgument (0 , $ senderReferences [ $ config ['failure_transport ' ] ]);
1689
1695
$ container ->getDefinition ('console.command.messenger_failed_messages_retry ' )
1690
- ->replaceArgument (0 , $ config ['failure_transport ' ])
1691
- ->replaceArgument (4 , $ transportRetryReferences [$ config ['failure_transport ' ]] ?? null );
1696
+ ->replaceArgument (0 , $ config ['failure_transport ' ]);
1692
1697
$ container ->getDefinition ('console.command.messenger_failed_messages_show ' )
1693
1698
->replaceArgument (0 , $ config ['failure_transport ' ]);
1694
1699
$ container ->getDefinition ('console.command.messenger_failed_messages_remove ' )
0 commit comments