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

Appearance settings

Commit 3d4e59a

Browse filesBrowse files
committed
[Messenger] Removing "sync" transport and replacing it with much nicer config trick
1 parent ec8e34f commit 3d4e59a
Copy full SHA for 3d4e59a

File tree

11 files changed

+88
-202
lines changed
Filter options

11 files changed

+88
-202
lines changed

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

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
+25-21Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1774,18 +1774,27 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
17741774
$container->setAlias('messenger.default_serializer', $config['serializer']['default_serializer']);
17751775
}
17761776

1777-
$senderAliases = [];
1777+
$senderReferences = [];
1778+
$syncTransports = [];
17781779
$transportRetryReferences = [];
17791780
foreach ($config['transports'] as $name => $transport) {
17801781
$serializerId = $transport['serializer'] ?? 'messenger.default_serializer';
17811782

1782-
$transportDefinition = (new Definition(TransportInterface::class))
1783-
->setFactory([new Reference('messenger.transport_factory'), 'createTransport'])
1784-
->setArguments([$transport['dsn'], $transport['options'] + ['transport_name' => $name], new Reference($serializerId)])
1785-
->addTag('messenger.receiver', ['alias' => $name])
1786-
;
1787-
$container->setDefinition($transportId = 'messenger.transport.'.$name, $transportDefinition);
1788-
$senderAliases[$name] = $transportId;
1783+
if (0 === strpos($transport['dsn'], 'sync://')) {
1784+
$syncTransports[] = $name;
1785+
} else {
1786+
$transportDefinition = (new Definition(TransportInterface::class))
1787+
->setFactory([new Reference('messenger.transport_factory'), 'createTransport'])
1788+
->setArguments([$transport['dsn'], $transport['options'] + ['transport_name' => $name], new Reference($serializerId)])
1789+
->addTag('messenger.receiver', ['alias' => $name])
1790+
;
1791+
$container->setDefinition($transportId = 'messenger.transport.'.$name, $transportDefinition);
1792+
1793+
// alias => service_id
1794+
$senderReferences[$name] = new Reference($transportId);
1795+
// service_id => service_id
1796+
$senderReferences[$transportId] = new Reference($transportId);
1797+
}
17891798

17901799
if (null !== $transport['retry_strategy']['service']) {
17911800
$transportRetryReferences[$name] = new Reference($transport['retry_strategy']['service']);
@@ -1803,30 +1812,25 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
18031812
}
18041813
}
18051814

1806-
$senderReferences = [];
1807-
// alias => service_id
1808-
foreach ($senderAliases as $alias => $serviceId) {
1809-
$senderReferences[$alias] = new Reference($serviceId);
1810-
}
1811-
// service_id => service_id
1812-
foreach ($senderAliases as $serviceId) {
1813-
$senderReferences[$serviceId] = new Reference($serviceId);
1814-
}
1815-
18161815
$messageToSendersMapping = [];
18171816
foreach ($config['routing'] as $message => $messageConfiguration) {
18181817
if ('*' !== $message && !class_exists($message) && !interface_exists($message, false)) {
18191818
throw new LogicException(sprintf('Invalid Messenger routing configuration: class or interface "%s" not found.', $message));
18201819
}
18211820

1822-
// make sure senderAliases contains all senders
1821+
// filter out "sync" senders
1822+
$realSenders = [];
18231823
foreach ($messageConfiguration['senders'] as $sender) {
1824-
if (!isset($senderReferences[$sender])) {
1824+
if (isset($senderReferences[$sender])) {
1825+
$realSenders[] = $sender;
1826+
} elseif (!\in_array($sender, $syncTransports, true)) {
18251827
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));
18261828
}
18271829
}
18281830

1829-
$messageToSendersMapping[$message] = $messageConfiguration['senders'];
1831+
if ($realSenders) {
1832+
$messageToSendersMapping[$message] = $realSenders;
1833+
}
18301834
}
18311835

18321836
$container->getDefinition('messenger.senders_locator')

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

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml
-5Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,6 @@
7373
<tag name="messenger.transport_factory" />
7474
</service>
7575

76-
<service id="messenger.transport.sync.factory" class="Symfony\Component\Messenger\Transport\Sync\SyncTransportFactory">
77-
<tag name="messenger.transport_factory" />
78-
<argument type="service" id="messenger.routable_message_bus" />
79-
</service>
80-
8176
<service id="messenger.transport.in_memory.factory" class="Symfony\Component\Messenger\Transport\InMemoryTransportFactory">
8277
<tag name="messenger.transport_factory" />
8378
<tag name="kernel.reset" method="reset" />
+15Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
$container->loadFromExtension('framework', [
4+
'messenger' => [
5+
'transports' => [
6+
'amqp' => 'amqp://localhost/%2f/messages',
7+
'sync' => 'sync://',
8+
],
9+
'routing' => [
10+
'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\DummyMessage' => ['amqp'],
11+
'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\SecondMessage' => ['sync'],
12+
'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\FooMessage' => ['amqp', 'sync'],
13+
],
14+
],
15+
]);
+24Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<container xmlns="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:routing message-class="Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\DummyMessage">
11+
<framework:sender service="amqp" />
12+
</framework:routing>
13+
<framework:routing message-class="Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\SecondMessage">
14+
<framework:sender service="sync" />
15+
</framework:routing>
16+
<framework:routing message-class="Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\FooMessage">
17+
<framework:sender service="amqp" />
18+
<framework:sender service="sync" />
19+
</framework:routing>
20+
<framework:transport name="amqp" dsn="amqp://localhost/%2f/messages" />
21+
<framework:transport name="sync" dsn="sync://" />
22+
</framework:messenger>
23+
</framework:config>
24+
</container>
+10Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
framework:
2+
messenger:
3+
transports:
4+
amqp: 'amqp://localhost/%2f/messages'
5+
sync: 'sync://'
6+
7+
routing:
8+
'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\DummyMessage': amqp
9+
'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\SecondMessage': sync
10+
'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\FooMessage': [amqp, sync]

‎src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php
+13Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
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;
1921
use Symfony\Bundle\FrameworkBundle\Tests\TestCase;
2022
use Symfony\Bundle\FullStack;
2123
use Symfony\Component\Cache\Adapter\AdapterInterface;
@@ -780,6 +782,17 @@ public function testMessengerInvalidTransportRouting()
780782
$this->createContainerFromFile('messenger_routing_invalid_transport');
781783
}
782784

785+
public function testMessengerSyncTransport()
786+
{
787+
$container = $this->createContainerFromFile('messenger_sync_transport');
788+
$senderLocatorDefinition = $container->getDefinition('messenger.senders_locator');
789+
790+
$sendersMapping = $senderLocatorDefinition->getArgument(0);
791+
$this->assertEquals(['amqp'], $sendersMapping[DummyMessage::class]);
792+
$this->assertArrayNotHasKey(SecondMessage::class, $sendersMapping);
793+
$this->assertEquals(['amqp'], $sendersMapping[FooMessage::class]);
794+
}
795+
783796
public function testTranslator()
784797
{
785798
$container = $this->createContainerFromFile('full');

‎src/Symfony/Component/Messenger/CHANGELOG.md

Copy file name to clipboardExpand all lines: src/Symfony/Component/Messenger/CHANGELOG.md
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ CHANGELOG
44
4.4.0
55
-----
66

7+
* [BC BREAK] The `SyncTransport` and `SyncTransportFactory` classes were removed.
78
* Deprecated passing a `ContainerInterface` instance as first argument of the `ConsumeMessagesCommand` constructor,
89
pass a `RoutableMessageBus` instance instead.
910
* Added support for auto trimming of Redis streams.

‎src/Symfony/Component/Messenger/Tests/Transport/Sync/SyncTransportFactoryTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Messenger/Tests/Transport/Sync/SyncTransportFactoryTest.php
-30Lines changed: 0 additions & 30 deletions
This file was deleted.

‎src/Symfony/Component/Messenger/Tests/Transport/Sync/SyncTransportTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Messenger/Tests/Transport/Sync/SyncTransportTest.php
-41Lines changed: 0 additions & 41 deletions
This file was deleted.

‎src/Symfony/Component/Messenger/Transport/Sync/SyncTransport.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Messenger/Transport/Sync/SyncTransport.php
-65Lines changed: 0 additions & 65 deletions
This file was deleted.

‎src/Symfony/Component/Messenger/Transport/Sync/SyncTransportFactory.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Messenger/Transport/Sync/SyncTransportFactory.php
-40Lines changed: 0 additions & 40 deletions
This file was deleted.

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.