Skip to content

Commit ba8373a

Browse files
committed
Merge branch '4.4'
2 parents a0091fa + 73e0fc5 commit ba8373a

File tree

7 files changed

+52
-99
lines changed

7 files changed

+52
-99
lines changed

DependencyInjection/FrameworkExtension.php

Lines changed: 34 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1616,27 +1616,18 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
16161616
$container->setAlias('messenger.default_serializer', $config['serializer']['default_serializer']);
16171617
}
16181618

1619-
$senderReferences = [];
1620-
$syncTransports = [];
1619+
$senderAliases = [];
16211620
$transportRetryReferences = [];
16221621
foreach ($config['transports'] as $name => $transport) {
16231622
$serializerId = $transport['serializer'] ?? 'messenger.default_serializer';
16241623

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;
16401631

16411632
if (null !== $transport['retry_strategy']['service']) {
16421633
$transportRetryReferences[$name] = new Reference($transport['retry_strategy']['service']);
@@ -1654,41 +1645,55 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
16541645
}
16551646
}
16561647

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+
16571658
$messageToSendersMapping = [];
16581659
foreach ($config['routing'] as $message => $messageConfiguration) {
16591660
if ('*' !== $message && !class_exists($message) && !interface_exists($message, false)) {
16601661
throw new LogicException(sprintf('Invalid Messenger routing configuration: class or interface "%s" not found.', $message));
16611662
}
16621663

1663-
// filter out "sync" senders
1664-
$realSenders = [];
1664+
// make sure senderAliases contains all senders
16651665
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])) {
16691667
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));
16701668
}
16711669
}
16721670

1673-
if ($realSenders) {
1674-
$messageToSendersMapping[$message] = $realSenders;
1675-
}
1671+
$messageToSendersMapping[$message] = $messageConfiguration['senders'];
16761672
}
16771673

1674+
$sendersServiceLocator = ServiceLocatorTagPass::register($container, $senderReferences);
1675+
16781676
$container->getDefinition('messenger.senders_locator')
16791677
->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)
16811683
;
16821684

16831685
$container->getDefinition('messenger.retry_strategy_locator')
16841686
->replaceArgument(0, $transportRetryReferences);
16851687

16861688
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+
16871693
$container->getDefinition('messenger.failure.send_failed_message_to_failure_transport_listener')
1688-
->replaceArgument(1, $config['failure_transport']);
1694+
->replaceArgument(0, $senderReferences[$config['failure_transport']]);
16891695
$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']);
16921697
$container->getDefinition('console.command.messenger_failed_messages_show')
16931698
->replaceArgument(0, $config['failure_transport']);
16941699
$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" />
@@ -115,25 +114,24 @@
115114

116115
<service id="console.command.messenger_failed_messages_retry" class="Symfony\Component\Messenger\Command\FailedMessagesRetryCommand">
117116
<argument /> <!-- Receiver name -->
118-
<argument /> <!-- Receiver locator -->
117+
<argument /> <!-- Receiver -->
119118
<argument type="service" id="messenger.routable_message_bus" />
120119
<argument type="service" id="event_dispatcher" />
121-
<argument /> <!-- Retry strategy -->
122120
<argument type="service" id="logger" />
123121

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

127125
<service id="console.command.messenger_failed_messages_show" class="Symfony\Component\Messenger\Command\FailedMessagesShowCommand">
128126
<argument /> <!-- Receiver name -->
129-
<argument /> <!-- Receiver locator -->
127+
<argument /> <!-- Receiver -->
130128

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

134132
<service id="console.command.messenger_failed_messages_remove" class="Symfony\Component\Messenger\Command\FailedMessagesRemoveCommand">
135133
<argument /> <!-- Receiver name -->
136-
<argument /> <!-- Receiver locator -->
134+
<argument /> <!-- Receiver -->
137135

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

Resources/config/messenger.xml

Lines changed: 15 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" />
@@ -75,6 +75,11 @@
7575
<tag name="messenger.transport_factory" />
7676
</service>
7777

78+
<service id="messenger.transport.sync.factory" class="Symfony\Component\Messenger\Transport\Sync\SyncTransportFactory">
79+
<tag name="messenger.transport_factory" />
80+
<argument type="service" id="messenger.routable_message_bus" />
81+
</service>
82+
7883
<service id="messenger.transport.in_memory.factory" class="Symfony\Component\Messenger\Transport\InMemoryTransportFactory">
7984
<tag name="messenger.transport_factory" />
8085
<tag name="kernel.reset" method="reset" />
@@ -93,12 +98,19 @@
9398
<argument /> <!-- max delay ms -->
9499
</service>
95100

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+
96109
<!-- failed handling -->
97110
<service id="messenger.failure.send_failed_message_to_failure_transport_listener" class="Symfony\Component\Messenger\EventListener\SendFailedMessageToFailureTransportListener">
98111
<tag name="kernel.event_subscriber" />
99112
<tag name="monolog.logger" channel="messenger" />
100-
<argument type="service" id="messenger.routable_message_bus" />
101-
<argument /> <!-- Failure transport name -->
113+
<argument /> <!-- Failure transport -->
102114
<argument type="service" id="logger" on-invalid="ignore" />
103115
</service>
104116

Tests/DependencyInjection/Fixtures/php/messenger_sync_transport.php

Lines changed: 0 additions & 15 deletions
This file was deleted.

Tests/DependencyInjection/Fixtures/xml/messenger_sync_transport.xml

Lines changed: 0 additions & 24 deletions
This file was deleted.

Tests/DependencyInjection/Fixtures/yml/messenger_sync_transport.yml

Lines changed: 0 additions & 10 deletions
This file was deleted.

Tests/DependencyInjection/FrameworkExtensionTest.php

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddAnnotationsCachedReaderPass;
1717
use Symfony\Bundle\FrameworkBundle\DependencyInjection\FrameworkExtension;
1818
use Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\DummyMessage;
19-
use Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\FooMessage;
20-
use Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\SecondMessage;
2119
use Symfony\Bundle\FrameworkBundle\Tests\TestCase;
2220
use Symfony\Bundle\FullStack;
2321
use Symfony\Component\Cache\Adapter\AdapterInterface;
@@ -684,17 +682,6 @@ public function testMessengerInvalidTransportRouting()
684682
$this->createContainerFromFile('messenger_routing_invalid_transport');
685683
}
686684

687-
public function testMessengerSyncTransport()
688-
{
689-
$container = $this->createContainerFromFile('messenger_sync_transport');
690-
$senderLocatorDefinition = $container->getDefinition('messenger.senders_locator');
691-
692-
$sendersMapping = $senderLocatorDefinition->getArgument(0);
693-
$this->assertEquals(['amqp'], $sendersMapping[DummyMessage::class]);
694-
$this->assertArrayNotHasKey(SecondMessage::class, $sendersMapping);
695-
$this->assertEquals(['amqp'], $sendersMapping[FooMessage::class]);
696-
}
697-
698685
public function testTranslator()
699686
{
700687
$container = $this->createContainerFromFile('full');

0 commit comments

Comments
 (0)