Skip to content

Commit ef6f23e

Browse files
weaverryanfabpot
authored andcommitted
Making the serializer configurable by transport
1 parent 0727664 commit ef6f23e

29 files changed

+75
-174
lines changed

src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md

+9-2
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,18 @@ CHANGELOG
88
* Not passing the project directory to the constructor of the `AssetsInstallCommand` is deprecated. This argument will
99
be mandatory in 5.0.
1010
* Deprecated the "Psr\SimpleCache\CacheInterface" / "cache.app.simple" service, use "Symfony\Contracts\Cache\CacheInterface" / "cache.app" instead
11+
* Added the ability to specify a custom `serializer` option for each
12+
transport under`framework.messenger.transports`.
1113
* [BC Break] When using Messenger, the default transport changed from
1214
using Symfony's serializer service to use `PhpSerializer`, which uses
1315
PHP's native `serialize()` and `unserialize()` functions. To use the
14-
original serialization method, set the `framework.messenger.serializer.id`
15-
config option to `messenger.transport.symfony_serializer`.
16+
original serialization method, set the `framework.messenger.defaut_serializer`
17+
config option to `messenger.transport.symfony_serializer`. Or set the
18+
`serializer` option under one specific `transport`.
19+
* [BC Break] The `framework.messenger.serializer` config key changed to
20+
`framework.messenger.default_serializer`, which holds the string service
21+
id and `framework.messenger.symfony_serializer`, which configures the
22+
options if you're using Symfony's serializer.
1623
* Added information about deprecated aliases in `debug:autowiring`
1724
* Added php ini session options `sid_length` and `sid_bits_per_character`
1825
to the `session` section of the configuration

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

+8-17
Original file line numberDiff line numberDiff line change
@@ -1107,29 +1107,19 @@ function ($a) {
11071107
->end()
11081108
->end()
11091109
->end()
1110-
->arrayNode('serializer')
1110+
->scalarNode('default_serializer')
1111+
->defaultValue('messenger.transport.native_php_serializer')
1112+
->info('Service id to use as the default serializer for the transports.')
1113+
->end()
1114+
->arrayNode('symfony_serializer')
11111115
->addDefaultsIfNotSet()
1112-
->beforeNormalization()
1113-
->always()
1114-
->then(function ($config) {
1115-
if (false === $config) {
1116-
return ['id' => null];
1117-
}
1118-
1119-
if (\is_string($config)) {
1120-
return ['id' => $config];
1121-
}
1122-
1123-
return $config;
1124-
})
1125-
->end()
11261116
->children()
1127-
->scalarNode('id')->defaultValue('messenger.transport.native_php_serializer')->end()
1128-
->scalarNode('format')->defaultValue('json')->end()
1117+
->scalarNode('format')->defaultValue('json')->info('Serialization format for the messenger.transport.symfony_serializer service (which is not the serializer used by default).')->end()
11291118
->arrayNode('context')
11301119
->normalizeKeys(false)
11311120
->useAttributeAsKey('name')
11321121
->defaultValue([])
1122+
->info('Context array for the messenger.transport.symfony_serializer service (which is not the serializer used by default).')
11331123
->prototype('variable')->end()
11341124
->end()
11351125
->end()
@@ -1146,6 +1136,7 @@ function ($a) {
11461136
->fixXmlConfig('option')
11471137
->children()
11481138
->scalarNode('dsn')->end()
1139+
->scalarNode('serializer')->defaultNull()->info('Service id of a custom serializer to use.')->end()
11491140
->arrayNode('options')
11501141
->normalizeKeys(false)
11511142
->defaultValue([])

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

+12-27
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@
7878
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
7979
use Symfony\Component\Messenger\MessageBus;
8080
use Symfony\Component\Messenger\MessageBusInterface;
81-
use Symfony\Component\Messenger\Transport\Serialization\SerializerInterface;
8281
use Symfony\Component\Messenger\Transport\TransportFactoryInterface;
8382
use Symfony\Component\Messenger\Transport\TransportInterface;
8483
use Symfony\Component\Mime\MimeTypeGuesserInterface;
@@ -1604,28 +1603,6 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
16041603

16051604
$loader->load('messenger.xml');
16061605

1607-
if (empty($config['transports'])) {
1608-
$container->removeDefinition('messenger.transport.symfony_serializer');
1609-
$container->removeDefinition('messenger.transport.amqp.factory');
1610-
} else {
1611-
if ('messenger.transport.symfony_serializer' === $config['serializer']['id']) {
1612-
if (!$this->isConfigEnabled($container, $serializerConfig)) {
1613-
throw new LogicException('The Messenger serializer cannot be enabled as the Serializer support is not available. Try enabling it or running "composer require symfony/serializer-pack".');
1614-
}
1615-
1616-
$container->getDefinition('messenger.transport.symfony_serializer')
1617-
->replaceArgument(1, $config['serializer']['format'])
1618-
->replaceArgument(2, $config['serializer']['context']);
1619-
}
1620-
1621-
if ($config['serializer']['id']) {
1622-
$container->setAlias('messenger.transport.serializer', $config['serializer']['id']);
1623-
} else {
1624-
$container->removeDefinition('messenger.transport.amqp.factory');
1625-
$container->removeDefinition(SerializerInterface::class);
1626-
}
1627-
}
1628-
16291606
if (null === $config['default_bus'] && 1 === \count($config['buses'])) {
16301607
$config['default_bus'] = key($config['buses']);
16311608
}
@@ -1677,16 +1654,24 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
16771654
}
16781655
}
16791656

1657+
if (empty($config['transports'])) {
1658+
$container->removeDefinition('messenger.transport.symfony_serializer');
1659+
$container->removeDefinition('messenger.transport.amqp.factory');
1660+
} else {
1661+
$container->getDefinition('messenger.transport.symfony_serializer')
1662+
->replaceArgument(1, $config['symfony_serializer']['format'])
1663+
->replaceArgument(2, $config['symfony_serializer']['context']);
1664+
$container->setAlias('messenger.default_serializer', $config['default_serializer']);
1665+
}
1666+
16801667
$senderAliases = [];
16811668
$transportRetryReferences = [];
16821669
foreach ($config['transports'] as $name => $transport) {
1683-
if (0 === strpos($transport['dsn'], 'amqp://') && !$container->hasDefinition('messenger.transport.amqp.factory')) {
1684-
throw new LogicException('The default AMQP transport is not available. Make sure you have installed and enabled the Serializer component. Try enabling it or running "composer require symfony/serializer-pack".');
1685-
}
1670+
$serializerId = $transport['serializer'] ?? 'messenger.default_serializer';
16861671

16871672
$transportDefinition = (new Definition(TransportInterface::class))
16881673
->setFactory([new Reference('messenger.transport_factory'), 'createTransport'])
1689-
->setArguments([$transport['dsn'], $transport['options']])
1674+
->setArguments([$transport['dsn'], $transport['options'], new Reference($serializerId)])
16901675
->addTag('messenger.receiver', ['alias' => $name])
16911676
;
16921677
$container->setDefinition($transportId = 'messenger.transport.'.$name, $transportDefinition);

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

+1-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
<argument /> <!-- Format -->
2727
<argument type="collection" /> <!-- Context -->
2828
</service>
29-
<service id="Symfony\Component\Messenger\Transport\Serialization\SerializerInterface" alias="messenger.transport.serializer" />
29+
<service id="Symfony\Component\Messenger\Transport\Serialization\SerializerInterface" alias="messenger.default_serializer" />
3030

3131
<service id="messenger.transport.native_php_serializer" class="Symfony\Component\Messenger\Transport\Serialization\PhpSerializer" />
3232

@@ -64,7 +64,6 @@
6464

6565
<service id="messenger.transport.amqp.factory" class="Symfony\Component\Messenger\Transport\AmqpExt\AmqpTransportFactory">
6666
<tag name="messenger.transport_factory" />
67-
<argument type="service" id="messenger.transport.serializer" />
6867
</service>
6968

7069
<service id="messenger.transport.sync.factory" class="Symfony\Component\Messenger\Transport\Sync\SyncTransportFactory">

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

+4-3
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,8 @@
402402

403403
<xsd:complexType name="messenger">
404404
<xsd:sequence>
405-
<xsd:element name="serializer" type="messenger_serializer" minOccurs="0" />
405+
<xsd:element name="default-serializer" type="xsd:string" minOccurs="0" />
406+
<xsd:element name="symfony-serializer" type="messenger_symfony_serializer" minOccurs="0" />
406407
<xsd:element name="encoder" type="xsd:string" minOccurs="0" />
407408
<xsd:element name="decoder" type="xsd:string" minOccurs="0" />
408409
<xsd:element name="routing" type="messenger_routing" minOccurs="0" maxOccurs="unbounded" />
@@ -412,12 +413,11 @@
412413
<xsd:attribute name="default-bus" type="xsd:string" />
413414
</xsd:complexType>
414415

415-
<xsd:complexType name="messenger_serializer">
416+
<xsd:complexType name="messenger_symfony_serializer">
416417
<xsd:sequence>
417418
<xsd:element name="context" type="metadata" minOccurs="0" maxOccurs="unbounded" />
418419
</xsd:sequence>
419420
<xsd:attribute name="format" type="xsd:string" />
420-
<xsd:attribute name="id" type="xsd:string" />
421421
</xsd:complexType>
422422

423423
<xsd:complexType name="messenger_routing">
@@ -437,6 +437,7 @@
437437
<xsd:element name="options" type="metadata" minOccurs="0" maxOccurs="unbounded" />
438438
</xsd:sequence>
439439
<xsd:attribute name="name" type="xsd:string" />
440+
<xsd:attribute name="serializer" type="xsd:string" />
440441
<xsd:attribute name="dsn" type="xsd:string" />
441442
</xsd:complexType>
442443

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -325,8 +325,8 @@ class_exists(SemaphoreStore::class) && SemaphoreStore::isSupported() ? 'semaphor
325325
'enabled' => !class_exists(FullStack::class) && interface_exists(MessageBusInterface::class),
326326
'routing' => [],
327327
'transports' => [],
328-
'serializer' => [
329-
'id' => 'messenger.transport.native_php_serializer',
328+
'default_serializer' => 'messenger.transport.native_php_serializer',
329+
'symfony_serializer' => [
330330
'format' => 'json',
331331
'context' => [],
332332
],

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
$container->loadFromExtension('framework', [
77
'messenger' => [
8-
'serializer' => false,
8+
'default_serializer' => false,
99
'routing' => [
1010
FooMessage::class => ['sender.bar', 'sender.biz'],
1111
BarMessage::class => 'sender.foo',

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_amqp_transport_no_serializer.php

-10
This file was deleted.

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
$container->loadFromExtension('framework', [
44
'serializer' => true,
55
'messenger' => [
6-
'serializer' => 'messenger.transport.symfony_serializer',
6+
'default_serializer' => 'messenger.transport.symfony_serializer',
77
'routing' => [
88
'Symfony\Component\Messenger\Tests\Fixtures\DummyMessage' => ['amqp', 'audit'],
99
'Symfony\Component\Messenger\Tests\Fixtures\SecondMessage' => [

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
$container->loadFromExtension('framework', [
44
'serializer' => true,
55
'messenger' => [
6-
'serializer' => [
7-
'id' => 'messenger.transport.symfony_serializer',
6+
'default_serializer' => 'messenger.transport.symfony_serializer',
7+
'symfony_serializer' => [
88
'format' => 'csv',
99
'context' => ['enable_max_depth' => true],
1010
],

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport_no_serializer.php

-13
This file was deleted.

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transports.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@
33
$container->loadFromExtension('framework', [
44
'serializer' => true,
55
'messenger' => [
6-
'serializer' => 'messenger.transport.symfony_serializer',
6+
'default_serializer' => 'messenger.transport.symfony_serializer',
77
'transports' => [
88
'default' => 'amqp://localhost/%2f/messages',
99
'customised' => [
1010
'dsn' => 'amqp://localhost/%2f/messages?exchange_name=exchange_name',
1111
'options' => ['queue' => ['name' => 'Queue']],
12+
'serializer' => 'messenger.transport.native_php_serializer',
1213
],
1314
],
1415
],

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_amqp_transport_no_serializer.xml

-14
This file was deleted.

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<framework:config>
99
<framework:serializer enabled="true" />
1010
<framework:messenger>
11-
<framework:serializer id="messenger.transport.symfony_serializer" />
11+
<framework:default-serializer>messenger.transport.symfony_serializer</framework:default-serializer>
1212
<framework:routing message-class="Symfony\Component\Messenger\Tests\Fixtures\DummyMessage">
1313
<framework:sender service="amqp" />
1414
<framework:sender service="audit" />

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport.xml

+3-2
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@
88
<framework:config>
99
<framework:serializer enabled="true" />
1010
<framework:messenger>
11-
<framework:serializer id="messenger.transport.symfony_serializer" format="csv">
11+
<framework:default-serializer>messenger.transport.symfony_serializer</framework:default-serializer>
12+
<framework:symfony-serializer format="csv">
1213
<framework:context>
1314
<framework:enable_max_depth>true</framework:enable_max_depth>
1415
</framework:context>
15-
</framework:serializer>
16+
</framework:symfony-serializer>
1617
<framework:transport name="default" dsn="amqp://localhost/%2f/messages" />
1718
</framework:messenger>
1819
</framework:config>

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport_no_serializer.xml

-15
This file was deleted.

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transports.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
<framework:config>
99
<framework:serializer enabled="true" />
1010
<framework:messenger>
11-
<framework:serializer id="messenger.transport.symfony_serializer" />
11+
<framework:default-serializer>messenger.transport.symfony_serializer</framework:default-serializer>
1212
<framework:transport name="default" dsn="amqp://localhost/%2f/messages" />
13-
<framework:transport name="customised" dsn="amqp://localhost/%2f/messages?exchange_name=exchange_name">
13+
<framework:transport name="customised" dsn="amqp://localhost/%2f/messages?exchange_name=exchange_name" serializer="messenger.transport.native_php_serializer">
1414
<framework:options>
1515
<framework:queue>
1616
<framework:name>Queue</framework:name>
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
framework:
22
messenger:
3-
serializer: false
3+
default_serializer: false
44
routing:
55
'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\FooMessage': ['sender.bar', 'sender.biz']
66
'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\BarMessage': 'sender.foo'

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_amqp_transport_no_serializer.yml

-5
This file was deleted.

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
framework:
22
serializer: true
33
messenger:
4-
serializer: messenger.transport.symfony_serializer
4+
default_serializer: messenger.transport.symfony_serializer
55
routing:
66
'Symfony\Component\Messenger\Tests\Fixtures\DummyMessage': [amqp, audit]
77
'Symfony\Component\Messenger\Tests\Fixtures\SecondMessage':

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
framework:
22
serializer: true
33
messenger:
4-
serializer:
5-
id: messenger.transport.symfony_serializer
4+
default_serializer: messenger.transport.symfony_serializer
5+
symfony_serializer:
66
format: csv
77
context:
88
enable_max_depth: true

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport_no_serializer.yml

-7
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
framework:
22
serializer: true
33
messenger:
4-
serializer: messenger.transport.symfony_serializer
4+
default_serializer: messenger.transport.symfony_serializer
55
transports:
66
default: 'amqp://localhost/%2f/messages'
77
customised:
88
dsn: 'amqp://localhost/%2f/messages?exchange_name=exchange_name'
99
options:
1010
queue:
1111
name: Queue
12+
serializer: 'messenger.transport.native_php_serializer'

0 commit comments

Comments
 (0)