Skip to content

Commit 73e0fc5

Browse files
committed
[Messenger] extract worker logic to listener and sent messages for retry and failure directly to transport instead of redispatching on the bus
1 parent 9027376 commit 73e0fc5

File tree

4 files changed

+28
-14
lines changed

4 files changed

+28
-14
lines changed

DependencyInjection/FrameworkExtension.php

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1810,20 +1810,29 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
18101810
$messageToSendersMapping[$message] = $messageConfiguration['senders'];
18111811
}
18121812

1813+
$sendersServiceLocator = ServiceLocatorTagPass::register($container, $senderReferences);
1814+
18131815
$container->getDefinition('messenger.senders_locator')
18141816
->replaceArgument(0, $messageToSendersMapping)
1815-
->replaceArgument(1, ServiceLocatorTagPass::register($container, $senderReferences))
1817+
->replaceArgument(1, $sendersServiceLocator)
1818+
;
1819+
1820+
$container->getDefinition('messenger.retry.send_failed_message_for_retry_listener')
1821+
->replaceArgument(0, $sendersServiceLocator)
18161822
;
18171823

18181824
$container->getDefinition('messenger.retry_strategy_locator')
18191825
->replaceArgument(0, $transportRetryReferences);
18201826

18211827
if ($config['failure_transport']) {
1828+
if (!isset($senderReferences[$config['failure_transport']])) {
1829+
throw new LogicException(sprintf('Invalid Messenger configuration: the failure transport "%s" is not a valid transport or service id.', $config['failure_transport']));
1830+
}
1831+
18221832
$container->getDefinition('messenger.failure.send_failed_message_to_failure_transport_listener')
1823-
->replaceArgument(1, $config['failure_transport']);
1833+
->replaceArgument(0, $senderReferences[$config['failure_transport']]);
18241834
$container->getDefinition('console.command.messenger_failed_messages_retry')
1825-
->replaceArgument(0, $config['failure_transport'])
1826-
->replaceArgument(4, $transportRetryReferences[$config['failure_transport']] ?? null);
1835+
->replaceArgument(0, $config['failure_transport']);
18271836
$container->getDefinition('console.command.messenger_failed_messages_show')
18281837
->replaceArgument(0, $config['failure_transport']);
18291838
$container->getDefinition('console.command.messenger_failed_messages_remove')

Resources/config/console.xml

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@
8686
<argument type="service" id="messenger.receiver_locator" />
8787
<argument type="service" id="logger" on-invalid="null" />
8888
<argument type="collection" /> <!-- Receiver names -->
89-
<argument type="service" id="messenger.retry_strategy_locator" />
9089
<argument type="service" id="event_dispatcher" />
9190
<call method="setCachePoolForRestartSignal">
9291
<argument type="service" id="cache.messenger.restart_workers_signal" />
@@ -116,25 +115,24 @@
116115

117116
<service id="console.command.messenger_failed_messages_retry" class="Symfony\Component\Messenger\Command\FailedMessagesRetryCommand">
118117
<argument /> <!-- Receiver name -->
119-
<argument /> <!-- Receiver locator -->
118+
<argument /> <!-- Receiver -->
120119
<argument type="service" id="messenger.routable_message_bus" />
121120
<argument type="service" id="event_dispatcher" />
122-
<argument /> <!-- Retry strategy -->
123121
<argument type="service" id="logger" />
124122

125123
<tag name="console.command" command="messenger:failed:retry" />
126124
</service>
127125

128126
<service id="console.command.messenger_failed_messages_show" class="Symfony\Component\Messenger\Command\FailedMessagesShowCommand">
129127
<argument /> <!-- Receiver name -->
130-
<argument /> <!-- Receiver locator -->
128+
<argument /> <!-- Receiver -->
131129

132130
<tag name="console.command" command="messenger:failed:show" />
133131
</service>
134132

135133
<service id="console.command.messenger_failed_messages_remove" class="Symfony\Component\Messenger\Command\FailedMessagesRemoveCommand">
136134
<argument /> <!-- Receiver name -->
137-
<argument /> <!-- Receiver locator -->
135+
<argument /> <!-- Receiver -->
138136

139137
<tag name="console.command" command="messenger:failed:remove" />
140138
</service>

Resources/config/messenger.xml

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<!-- Asynchronous -->
1111
<service id="messenger.senders_locator" class="Symfony\Component\Messenger\Transport\Sender\SendersLocator">
1212
<argument type="collection" /> <!-- Per message senders map -->
13-
<argument /> <!-- senders locator -->
13+
<argument /> <!-- senders service locator -->
1414
</service>
1515
<service id="messenger.middleware.send_message" class="Symfony\Component\Messenger\Middleware\SendMessageMiddleware">
1616
<tag name="monolog.logger" channel="messenger" />
@@ -98,12 +98,19 @@
9898
<argument /> <!-- max delay ms -->
9999
</service>
100100

101+
<service id="messenger.retry.send_failed_message_for_retry_listener" class="Symfony\Component\Messenger\EventListener\SendFailedMessageForRetryListener">
102+
<tag name="kernel.event_subscriber" />
103+
<tag name="monolog.logger" channel="messenger" />
104+
<argument /> <!-- senders service locator -->
105+
<argument type="service" id="messenger.retry_strategy_locator" />
106+
<argument type="service" id="logger" on-invalid="ignore" />
107+
</service>
108+
101109
<!-- failed handling -->
102110
<service id="messenger.failure.send_failed_message_to_failure_transport_listener" class="Symfony\Component\Messenger\EventListener\SendFailedMessageToFailureTransportListener">
103111
<tag name="kernel.event_subscriber" />
104112
<tag name="monolog.logger" channel="messenger" />
105-
<argument type="service" id="messenger.routable_message_bus" />
106-
<argument /> <!-- Failure transport name -->
113+
<argument /> <!-- Failure transport -->
107114
<argument type="service" id="logger" on-invalid="ignore" />
108115
</service>
109116

composer.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
"symfony/http-client": "^4.4|^5.0",
4646
"symfony/lock": "^4.4|^5.0",
4747
"symfony/mailer": "^4.4|^5.0",
48-
"symfony/messenger": "^4.3.6|^5.0",
48+
"symfony/messenger": "^4.4|^5.0",
4949
"symfony/mime": "^4.4|^5.0",
5050
"symfony/process": "^3.4|^4.0|^5.0",
5151
"symfony/security-csrf": "^3.4|^4.0|^5.0",
@@ -77,7 +77,7 @@
7777
"symfony/form": "<4.3",
7878
"symfony/lock": "<4.4",
7979
"symfony/mailer": "<4.4",
80-
"symfony/messenger": "<4.3.6",
80+
"symfony/messenger": "<4.4",
8181
"symfony/mime": "<4.4",
8282
"symfony/property-info": "<3.4",
8383
"symfony/security-bundle": "<4.4",

0 commit comments

Comments
 (0)