Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit98eaef7

Browse files
committed
messenger: multiple failed transports support
[Messenger] Multiple failure transports supportfix case when there is no failure transport definedavoid BCrebase with masterphp-cs-fixadd multiple failed transport support for failed commandsadd support for specific failed transports with failed commands
1 parent4dabd00 commit98eaef7

File tree

22 files changed

+620
-58
lines changed

22 files changed

+620
-58
lines changed

‎src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1146,6 +1146,10 @@ function ($a) {
11461146
->prototype('variable')
11471147
->end()
11481148
->end()
1149+
->scalarNode('failure_transport')
1150+
->defaultNull()
1151+
->info('Transport name to send failed messages to (after all retries have failed).')
1152+
->end()
11491153
->arrayNode('retry_strategy')
11501154
->addDefaultsIfNotSet()
11511155
->beforeNormalization()

‎src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php‎

Lines changed: 56 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1755,7 +1755,6 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
17551755
}
17561756

17571757
$sendersServiceLocator = ServiceLocatorTagPass::register($container,$senderReferences);
1758-
17591758
$container->getDefinition('messenger.senders_locator')
17601759
->replaceArgument(0,$messageToSendersMapping)
17611760
->replaceArgument(1,$sendersServiceLocator)
@@ -1768,24 +1767,75 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
17681767
$container->getDefinition('messenger.retry_strategy_locator')
17691768
->replaceArgument(0,$transportRetryReferences);
17701769

1770+
$hasAnyFailureTransport =false;
1771+
1772+
$failureTransports = [];
1773+
$failureTransportsServiceLocatorId ='messenger.failure_transports.locator';
1774+
$failureTransportsByName = [];
1775+
$failureTransportsByNameServiceLocatorId ='messenger.failure_transports_by_name.locator';
1776+
17711777
if ($config['failure_transport']) {
17721778
if (!isset($senderReferences[$config['failure_transport']])) {
17731779
thrownewLogicException(sprintf('Invalid Messenger configuration: the failure transport "%s" is not a valid transport or service id.',$config['failure_transport']));
17741780
}
17751781

1782+
$hasAnyFailureTransport =true;
1783+
$failureTransportRef =$senderReferences[$config['failure_transport']];
1784+
$failureTransportsByName[$config['failure_transport']] =$failureTransportRef;
1785+
1786+
$container->getDefinition('messenger.failure.send_failed_message_to_failure_transport_listener')
1787+
->replaceArgument(0,$failureTransportRef);
1788+
$container->getDefinition('messenger.failure.send_failed_message_to_failure_transport_listener')
1789+
->replaceArgument(2,null);
1790+
}
1791+
1792+
foreach ($config['transports']as$name =>$transport) {
1793+
if ($transport['failure_transport']) {
1794+
if (!isset($config['transports'][$transport['failure_transport']])) {
1795+
thrownewLogicException(sprintf('Invalid Messenger configuration: the failure transport "%s" is not a valid transport or service id.',$transport['failure_transport']));
1796+
}
1797+
1798+
$hasAnyFailureTransport =true;
1799+
$failureTransports[$name] =$senderReferences[$transport['failure_transport']];
1800+
$failureTransportsByName[$transport['failure_transport']] =$senderReferences[$transport['failure_transport']];
1801+
}
1802+
}
1803+
1804+
if ($hasAnyFailureTransport) {
1805+
$failureTransportsServiceLocator = ServiceLocatorTagPass::register($container,$failureTransports,$failureTransportsServiceLocatorId);
1806+
$container->getDefinition($failureTransportsServiceLocatorId)
1807+
->replaceArgument(0,$failureTransports)
1808+
->replaceArgument(1,$failureTransportsServiceLocator);
17761809
$container->getDefinition('messenger.failure.send_failed_message_to_failure_transport_listener')
1777-
->replaceArgument(0,$senderReferences[$config['failure_transport']]);
1810+
->replaceArgument(0,$senderReferences[$config['failure_transport']] ??null);
1811+
$container->getDefinition('messenger.failure.send_failed_message_to_failure_transport_listener')
1812+
->replaceArgument(2,\count($failureTransports) >0 ?$failureTransportsServiceLocator :null);
1813+
1814+
$failureTransportsByNameServiceLocator = ServiceLocatorTagPass::register($container,$failureTransportsByName,$failureTransportsByNameServiceLocatorId);
1815+
$container->getDefinition($failureTransportsByNameServiceLocatorId)
1816+
->replaceArgument(0,$failureTransportsByName)
1817+
->replaceArgument(1,$failureTransportsByNameServiceLocator);
1818+
17781819
$container->getDefinition('console.command.messenger_failed_messages_retry')
1779-
->replaceArgument(0,$config['failure_transport']);
1820+
->replaceArgument(0,$config['failure_transport'] ??null)
1821+
->replaceArgument(1,$failureTransportsByName[$config['failure_transport']] ??null)
1822+
->replaceArgument(5,$container->getDefinition($failureTransportsByNameServiceLocatorId));
1823+
17801824
$container->getDefinition('console.command.messenger_failed_messages_show')
1781-
->replaceArgument(0,$config['failure_transport']);
1825+
->replaceArgument(0,$config['failure_transport'] ??null)
1826+
->replaceArgument(1,$failureTransportsByName[$config['failure_transport']] ??null)
1827+
->replaceArgument(2,$container->getDefinition($failureTransportsByNameServiceLocatorId));
1828+
17821829
$container->getDefinition('console.command.messenger_failed_messages_remove')
1783-
->replaceArgument(0,$config['failure_transport']);
1830+
->replaceArgument(0,$config['failure_transport'] ??null)
1831+
->replaceArgument(1,$failureTransportsByName[$config['failure_transport']] ??null)
1832+
->replaceArgument(2,$container->getDefinition($failureTransportsByNameServiceLocatorId));;
1833+
17841834
}else {
1785-
$container->removeDefinition('messenger.failure.send_failed_message_to_failure_transport_listener');
17861835
$container->removeDefinition('console.command.messenger_failed_messages_retry');
17871836
$container->removeDefinition('console.command.messenger_failed_messages_show');
17881837
$container->removeDefinition('console.command.messenger_failed_messages_remove');
1838+
$container->removeDefinition('messenger.failure.send_failed_message_to_failure_transport_listener');
17891839
}
17901840
}
17911841

‎src/Symfony/Bundle/FrameworkBundle/Resources/config/console.xml‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,20 +119,23 @@
119119
<argumenttype="service"id="messenger.routable_message_bus" />
120120
<argumenttype="service"id="event_dispatcher" />
121121
<argumenttype="service"id="logger" />
122+
<argumentid="messenger.failure_transports_by_name.locator" /><!-- Failed transports service locator-->
122123

123124
<tagname="console.command"command="messenger:failed:retry" />
124125
</service>
125126

126127
<serviceid="console.command.messenger_failed_messages_show"class="Symfony\Component\Messenger\Command\FailedMessagesShowCommand">
127128
<argument /><!-- Receiver name-->
128129
<argument /><!-- Receiver-->
130+
<argumentid="messenger.failure_transports_by_name.locator" /><!-- Failed transports service locator-->
129131

130132
<tagname="console.command"command="messenger:failed:show" />
131133
</service>
132134

133135
<serviceid="console.command.messenger_failed_messages_remove"class="Symfony\Component\Messenger\Command\FailedMessagesRemoveCommand">
134136
<argument /><!-- Receiver name-->
135137
<argument /><!-- Receiver-->
138+
<argumentid="messenger.failure_transports_by_name.locator" /><!-- Failed transports service locator-->
136139

137140
<tagname="console.command"command="messenger:failed:remove" />
138141
</service>

‎src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml‎

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,20 @@
8383

8484
<serviceid="messenger.transport.sqs.factory"class="Symfony\Component\Messenger\Bridge\AmazonSqs\Transport\AmazonSqsTransportFactory"/>
8585

86+
<!-- failure transports locator per transport-->
87+
<serviceid="messenger.failure_transports.locator"class="Symfony\Component\DependencyInjection\ServiceLocator">
88+
<tagname="container.service_locator" />
89+
<argumenttype="collection" /><!-- failure transports map by transport-->
90+
<argument /><!-- failure transports locator-->
91+
</service>
92+
93+
<!-- failure transports locator per name-->
94+
<serviceid="messenger.failure_transports_by_name.locator"class="Symfony\Component\DependencyInjection\ServiceLocator">
95+
<tagname="container.service_locator" />
96+
<argumenttype="collection" /><!-- failure transports map by name-->
97+
<argument /><!-- failure transports locator-->
98+
</service>
99+
86100
<!-- retry-->
87101
<serviceid="messenger.retry_strategy_locator">
88102
<tagname="container.service_locator" />
@@ -108,8 +122,9 @@
108122
<serviceid="messenger.failure.send_failed_message_to_failure_transport_listener"class="Symfony\Component\Messenger\EventListener\SendFailedMessageToFailureTransportListener">
109123
<tagname="kernel.event_subscriber" />
110124
<tagname="monolog.logger"channel="messenger" />
111-
<argument /><!-- Failure transport-->
125+
<argument /><!--GlobalFailure transport-->
112126
<argumenttype="service"id="logger"on-invalid="ignore" />
127+
<argument /><!-- Failure transport inside each Transport-->
113128
</service>
114129

115130
<serviceid="messenger.listener.dispatch_pcntl_signal_listener"class="Symfony\Component\Messenger\EventListener\DispatchPcntlSignalListener">

‎src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,7 @@
451451
<xsd:attributename="name"type="xsd:string" />
452452
<xsd:attributename="serializer"type="xsd:string" />
453453
<xsd:attributename="dsn"type="xsd:string" />
454+
<xsd:attributename="failure-transport"type="xsd:string" />
454455
</xsd:complexType>
455456

456457
<xsd:complexTypename="messenger_retry_strategy">
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
$container->loadFromExtension('framework', [
4+
'messenger' => [
5+
'transports' => [
6+
'transport_1' => [
7+
'dsn' =>'null://',
8+
'failure_transport' =>'failure_transport_1'
9+
],
10+
'transport_2' =>'null://',
11+
'transport_3' => [
12+
'dsn' =>'null://',
13+
'failure_transport' =>'failure_transport_3'
14+
],
15+
'failure_transport_1' =>'null://',
16+
'failure_transport_3' =>'null://'
17+
],
18+
],
19+
]);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
$container->loadFromExtension('framework', [
4+
'messenger' => [
5+
'failure_transport' =>'failure_transport_global',
6+
'transports' => [
7+
'transport_1' => [
8+
'dsn' =>'null://',
9+
'failure_transport' =>'failure_transport_1'
10+
],
11+
'transport_2' =>'null://',
12+
'transport_3' => [
13+
'dsn' =>'null://',
14+
'failure_transport' =>'failure_transport_3'
15+
],
16+
'failure_transport_global' =>'null://',
17+
'failure_transport_1' =>'null://',
18+
'failure_transport_3' =>'null://',
19+
],
20+
],
21+
]);
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<containerxmlns="http://symfony.com/schema/dic/services"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xmlns:framework="http://symfony.com/schema/dic/symfony"
5+
xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd
6+
http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
7+
8+
<framework:config>
9+
<framework:messenger>
10+
<framework:transportname="transport_1"dsn="null://"failure_transport="failure_transport_1" />
11+
<framework:transportname="transport_2"dsn="null://" />
12+
<framework:transportname="transport_3"dsn="null://"failure_transport="failure_transport_3" />
13+
<framework:transportname="failure_transport_1"dsn="null://" />
14+
<framework:transportname="failure_transport_3"dsn="null://" />
15+
</framework:messenger>
16+
</framework:config>
17+
</container>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<containerxmlns="http://symfony.com/schema/dic/services"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xmlns:framework="http://symfony.com/schema/dic/symfony"
5+
xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd
6+
http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
7+
8+
<framework:config>
9+
<framework:messengerfailure_transport="failure_transport_global">
10+
<framework:transportname="transport_1"dsn="null://"failure_transport="failure_transport_1" />
11+
<framework:transportname="transport_2"dsn="null://" />
12+
<framework:transportname="transport_3"dsn="null://"failure_transport="failure_transport_3" />
13+
<framework:transportname="failure_transport_global"dsn="null://" />
14+
<framework:transportname="failure_transport_1"dsn="null://" />
15+
<framework:transportname="failure_transport_3"dsn="null://" />
16+
</framework:messenger>
17+
</framework:config>
18+
</container>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
framework:
2+
messenger:
3+
transports:
4+
transport_1:
5+
dsn:'null://'
6+
failure_transport:failure_transport_1
7+
transport_2:'null://'
8+
transport_3:
9+
dsn:'null://'
10+
failure_transport:failure_transport_3
11+
failure_transport_1:'null://'
12+
failure_transport_3:'null://'

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp