88use Symfony \Component \DependencyInjection \ContainerBuilder ;
99use Symfony \Component \DependencyInjection \Exception \OutOfBoundsException ;
1010use Symfony \Component \DependencyInjection \Reference ;
11+ use Win32ServiceBundle \MessengerSubscriber \ResetServicesListener ;
12+ use Win32ServiceBundle \MessengerSubscriber \SendFailedMessageForRetryListener ;
13+ use Win32ServiceBundle \MessengerSubscriber \SendFailedMessageToFailureTransportListener ;
1114
1215final class MessengerPass implements CompilerPassInterface
1316{
@@ -16,6 +19,13 @@ final class MessengerPass implements CompilerPassInterface
1619 private string $ win32ServiceRunnerTag = TagRunnerCompilerPass::WIN32SERVICE_RUNNER_TAG .'.messenger ' ;
1720
1821 public function process (ContainerBuilder $ container ): void
22+ {
23+ $ this ->processService ($ container );
24+ $ this ->processRetryConfig ($ container );
25+ $ this ->processFailledConfig ($ container );
26+ }
27+
28+ private function processService (ContainerBuilder $ container ): void
1929 {
2030 $ busIds = [];
2131 foreach ($ container ->findTaggedServiceIds ($ this ->busTag ) as $ busId => $ tags ) {
@@ -42,6 +52,7 @@ public function process(ContainerBuilder $container): void
4252 $ serviceRunnerDefinition = $ container ->getDefinition ($ win32ServiceId );
4353
4454 $ serviceRunnerDefinition ->replaceArgument (1 , new Reference ('messenger.routable_message_bus ' ));
55+ $ serviceRunnerDefinition ->replaceArgument (7 , new Reference (ResetServicesListener::class));
4556
4657 $ serviceRunnerDefinition ->replaceArgument (6 , array_values ($ receiverNames ));
4758 try {
@@ -51,4 +62,34 @@ public function process(ContainerBuilder $container): void
5162 }
5263 }
5364 }
65+
66+ private function processFailledConfig (ContainerBuilder $ container ): void
67+ {
68+ if (
69+ $ container ->hasDefinition ('messenger.failure.send_failed_message_to_failure_transport_listener ' ) === false
70+ || $ container ->hasDefinition (SendFailedMessageToFailureTransportListener::class) === false
71+ ) {
72+ return ;
73+ }
74+
75+ $ serviceSF = $ container ->findDefinition ('messenger.failure.send_failed_message_to_failure_transport_listener ' );
76+
77+ $ serviceWin32 = $ container ->findDefinition (SendFailedMessageToFailureTransportListener::class);
78+ $ serviceWin32 ->replaceArgument ('$failureSenders ' , $ serviceSF ->getArgument (0 ));
79+ }
80+
81+ private function processRetryConfig (ContainerBuilder $ container ): void
82+ {
83+ if (
84+ $ container ->hasDefinition ('messenger.retry.send_failed_message_for_retry_listener ' ) === false
85+ || $ container ->hasDefinition (SendFailedMessageForRetryListener::class) === false
86+ ) {
87+ return ;
88+ }
89+
90+ $ serviceSF = $ container ->findDefinition ('messenger.retry.send_failed_message_for_retry_listener ' );
91+
92+ $ serviceWin32 = $ container ->findDefinition (SendFailedMessageForRetryListener::class);
93+ $ serviceWin32 ->replaceArgument ('$sendersLocator ' , $ serviceSF ->getArgument (0 ));
94+ }
5495}
0 commit comments