Skip to content

Commit 3d4e59a

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

File tree

11 files changed

+88
-202
lines changed

11 files changed

+88
-202
lines changed

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

Lines 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

Lines 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" />
Lines 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+
]);
Lines 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>
Lines 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

Lines 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

Lines 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

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

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

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

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

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

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy