Skip to content

Commit 4fddafb

Browse files
Merge branch '4.4'
* 4.4: [ErrorRenderer] FlattenException cannot be final Fixing issue where worker-only middleware were run in all contexts [Messenger] Removing "sync" transport and replacing it with much nicer config trick Use port 465 for SES SMTP transport [DI] made the `%env(base64:...)%` processor able to decode base64url [VarDumper] improve displaying cut closures Set ReturnType of LockFactory to LockInterface [EventDispatcher] handle lazy-callable invokable
2 parents 8587ab1 + b856602 commit 4fddafb

File tree

6 files changed

+87
-26
lines changed

6 files changed

+87
-26
lines changed

DependencyInjection/FrameworkExtension.php

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1635,18 +1635,27 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
16351635
$container->setAlias('messenger.default_serializer', $config['serializer']['default_serializer']);
16361636
}
16371637

1638-
$senderAliases = [];
1638+
$senderReferences = [];
1639+
$syncTransports = [];
16391640
$transportRetryReferences = [];
16401641
foreach ($config['transports'] as $name => $transport) {
16411642
$serializerId = $transport['serializer'] ?? 'messenger.default_serializer';
16421643

1643-
$transportDefinition = (new Definition(TransportInterface::class))
1644-
->setFactory([new Reference('messenger.transport_factory'), 'createTransport'])
1645-
->setArguments([$transport['dsn'], $transport['options'] + ['transport_name' => $name], new Reference($serializerId)])
1646-
->addTag('messenger.receiver', ['alias' => $name])
1647-
;
1648-
$container->setDefinition($transportId = 'messenger.transport.'.$name, $transportDefinition);
1649-
$senderAliases[$name] = $transportId;
1644+
if (0 === strpos($transport['dsn'], 'sync://')) {
1645+
$syncTransports[] = $name;
1646+
} else {
1647+
$transportDefinition = (new Definition(TransportInterface::class))
1648+
->setFactory([new Reference('messenger.transport_factory'), 'createTransport'])
1649+
->setArguments([$transport['dsn'], $transport['options'] + ['transport_name' => $name], new Reference($serializerId)])
1650+
->addTag('messenger.receiver', ['alias' => $name])
1651+
;
1652+
$container->setDefinition($transportId = 'messenger.transport.'.$name, $transportDefinition);
1653+
1654+
// alias => service_id
1655+
$senderReferences[$name] = new Reference($transportId);
1656+
// service_id => service_id
1657+
$senderReferences[$transportId] = new Reference($transportId);
1658+
}
16501659

16511660
if (null !== $transport['retry_strategy']['service']) {
16521661
$transportRetryReferences[$name] = new Reference($transport['retry_strategy']['service']);
@@ -1664,30 +1673,25 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
16641673
}
16651674
}
16661675

1667-
$senderReferences = [];
1668-
// alias => service_id
1669-
foreach ($senderAliases as $alias => $serviceId) {
1670-
$senderReferences[$alias] = new Reference($serviceId);
1671-
}
1672-
// service_id => service_id
1673-
foreach ($senderAliases as $serviceId) {
1674-
$senderReferences[$serviceId] = new Reference($serviceId);
1675-
}
1676-
16771676
$messageToSendersMapping = [];
16781677
foreach ($config['routing'] as $message => $messageConfiguration) {
16791678
if ('*' !== $message && !class_exists($message) && !interface_exists($message, false)) {
16801679
throw new LogicException(sprintf('Invalid Messenger routing configuration: class or interface "%s" not found.', $message));
16811680
}
16821681

1683-
// make sure senderAliases contains all senders
1682+
// filter out "sync" senders
1683+
$realSenders = [];
16841684
foreach ($messageConfiguration['senders'] as $sender) {
1685-
if (!isset($senderReferences[$sender])) {
1685+
if (isset($senderReferences[$sender])) {
1686+
$realSenders[] = $sender;
1687+
} elseif (!\in_array($sender, $syncTransports, true)) {
16861688
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));
16871689
}
16881690
}
16891691

1690-
$messageToSendersMapping[$message] = $messageConfiguration['senders'];
1692+
if ($realSenders) {
1693+
$messageToSendersMapping[$message] = $realSenders;
1694+
}
16911695
}
16921696

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

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]

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;
@@ -680,6 +682,17 @@ public function testMessengerInvalidTransportRouting()
680682
$this->createContainerFromFile('messenger_routing_invalid_transport');
681683
}
682684

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

0 commit comments

Comments
 (0)