From ef6f23e8b9b856c7db9777c6eef8a6ad0a113d16 Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Thu, 21 Mar 2019 10:47:28 -0400 Subject: [PATCH] Making the serializer configurable by transport --- .../Bundle/FrameworkBundle/CHANGELOG.md | 11 +++++- .../DependencyInjection/Configuration.php | 25 ++++-------- .../FrameworkExtension.php | 39 ++++++------------- .../Resources/config/messenger.xml | 3 +- .../Resources/config/schema/symfony-1.0.xsd | 7 ++-- .../DependencyInjection/ConfigurationTest.php | 4 +- .../Fixtures/php/messenger.php | 2 +- ...messenger_amqp_transport_no_serializer.php | 10 ----- .../Fixtures/php/messenger_routing.php | 2 +- .../Fixtures/php/messenger_transport.php | 4 +- .../php/messenger_transport_no_serializer.php | 13 ------- .../Fixtures/php/messenger_transports.php | 3 +- ...messenger_amqp_transport_no_serializer.xml | 14 ------- .../Fixtures/xml/messenger_routing.xml | 2 +- .../Fixtures/xml/messenger_transport.xml | 5 ++- .../xml/messenger_transport_no_serializer.xml | 15 ------- .../Fixtures/xml/messenger_transports.xml | 4 +- .../Fixtures/yml/messenger.yml | 2 +- ...messenger_amqp_transport_no_serializer.yml | 5 --- .../Fixtures/yml/messenger_routing.yml | 2 +- .../Fixtures/yml/messenger_transport.yml | 4 +- .../yml/messenger_transport_no_serializer.yml | 7 ---- .../Fixtures/yml/messenger_transports.yml | 3 +- .../FrameworkExtensionTest.php | 27 +++---------- src/Symfony/Component/Messenger/CHANGELOG.md | 4 +- .../AmqpExt/AmqpTransportFactoryTest.php | 11 ++---- .../AmqpExt/AmqpTransportFactory.php | 12 +----- .../Messenger/Transport/TransportFactory.php | 5 ++- .../Transport/TransportFactoryInterface.php | 4 +- 29 files changed, 75 insertions(+), 174 deletions(-) delete mode 100644 src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_amqp_transport_no_serializer.php delete mode 100644 src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport_no_serializer.php delete mode 100644 src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_amqp_transport_no_serializer.xml delete mode 100644 src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport_no_serializer.xml delete mode 100644 src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_amqp_transport_no_serializer.yml delete mode 100644 src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport_no_serializer.yml diff --git a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md index d993fbe2584a2..ac3d97189822f 100644 --- a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md +++ b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md @@ -8,11 +8,18 @@ CHANGELOG * Not passing the project directory to the constructor of the `AssetsInstallCommand` is deprecated. This argument will be mandatory in 5.0. * Deprecated the "Psr\SimpleCache\CacheInterface" / "cache.app.simple" service, use "Symfony\Contracts\Cache\CacheInterface" / "cache.app" instead + * Added the ability to specify a custom `serializer` option for each + transport under`framework.messenger.transports`. * [BC Break] When using Messenger, the default transport changed from using Symfony's serializer service to use `PhpSerializer`, which uses PHP's native `serialize()` and `unserialize()` functions. To use the - original serialization method, set the `framework.messenger.serializer.id` - config option to `messenger.transport.symfony_serializer`. + original serialization method, set the `framework.messenger.defaut_serializer` + config option to `messenger.transport.symfony_serializer`. Or set the + `serializer` option under one specific `transport`. + * [BC Break] The `framework.messenger.serializer` config key changed to + `framework.messenger.default_serializer`, which holds the string service + id and `framework.messenger.symfony_serializer`, which configures the + options if you're using Symfony's serializer. * Added information about deprecated aliases in `debug:autowiring` * Added php ini session options `sid_length` and `sid_bits_per_character` to the `session` section of the configuration diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php index 1b1c079ec0aec..1b23702913404 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php @@ -1107,29 +1107,19 @@ function ($a) { ->end() ->end() ->end() - ->arrayNode('serializer') + ->scalarNode('default_serializer') + ->defaultValue('messenger.transport.native_php_serializer') + ->info('Service id to use as the default serializer for the transports.') + ->end() + ->arrayNode('symfony_serializer') ->addDefaultsIfNotSet() - ->beforeNormalization() - ->always() - ->then(function ($config) { - if (false === $config) { - return ['id' => null]; - } - - if (\is_string($config)) { - return ['id' => $config]; - } - - return $config; - }) - ->end() ->children() - ->scalarNode('id')->defaultValue('messenger.transport.native_php_serializer')->end() - ->scalarNode('format')->defaultValue('json')->end() + ->scalarNode('format')->defaultValue('json')->info('Serialization format for the messenger.transport.symfony_serializer service (which is not the serializer used by default).')->end() ->arrayNode('context') ->normalizeKeys(false) ->useAttributeAsKey('name') ->defaultValue([]) + ->info('Context array for the messenger.transport.symfony_serializer service (which is not the serializer used by default).') ->prototype('variable')->end() ->end() ->end() @@ -1146,6 +1136,7 @@ function ($a) { ->fixXmlConfig('option') ->children() ->scalarNode('dsn')->end() + ->scalarNode('serializer')->defaultNull()->info('Service id of a custom serializer to use.')->end() ->arrayNode('options') ->normalizeKeys(false) ->defaultValue([]) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index 65de91c4f7879..192154fa06af8 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -78,7 +78,6 @@ use Symfony\Component\Messenger\Handler\MessageHandlerInterface; use Symfony\Component\Messenger\MessageBus; use Symfony\Component\Messenger\MessageBusInterface; -use Symfony\Component\Messenger\Transport\Serialization\SerializerInterface; use Symfony\Component\Messenger\Transport\TransportFactoryInterface; use Symfony\Component\Messenger\Transport\TransportInterface; use Symfony\Component\Mime\MimeTypeGuesserInterface; @@ -1604,28 +1603,6 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder $loader->load('messenger.xml'); - if (empty($config['transports'])) { - $container->removeDefinition('messenger.transport.symfony_serializer'); - $container->removeDefinition('messenger.transport.amqp.factory'); - } else { - if ('messenger.transport.symfony_serializer' === $config['serializer']['id']) { - if (!$this->isConfigEnabled($container, $serializerConfig)) { - 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".'); - } - - $container->getDefinition('messenger.transport.symfony_serializer') - ->replaceArgument(1, $config['serializer']['format']) - ->replaceArgument(2, $config['serializer']['context']); - } - - if ($config['serializer']['id']) { - $container->setAlias('messenger.transport.serializer', $config['serializer']['id']); - } else { - $container->removeDefinition('messenger.transport.amqp.factory'); - $container->removeDefinition(SerializerInterface::class); - } - } - if (null === $config['default_bus'] && 1 === \count($config['buses'])) { $config['default_bus'] = key($config['buses']); } @@ -1677,16 +1654,24 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder } } + if (empty($config['transports'])) { + $container->removeDefinition('messenger.transport.symfony_serializer'); + $container->removeDefinition('messenger.transport.amqp.factory'); + } else { + $container->getDefinition('messenger.transport.symfony_serializer') + ->replaceArgument(1, $config['symfony_serializer']['format']) + ->replaceArgument(2, $config['symfony_serializer']['context']); + $container->setAlias('messenger.default_serializer', $config['default_serializer']); + } + $senderAliases = []; $transportRetryReferences = []; foreach ($config['transports'] as $name => $transport) { - if (0 === strpos($transport['dsn'], 'amqp://') && !$container->hasDefinition('messenger.transport.amqp.factory')) { - 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".'); - } + $serializerId = $transport['serializer'] ?? 'messenger.default_serializer'; $transportDefinition = (new Definition(TransportInterface::class)) ->setFactory([new Reference('messenger.transport_factory'), 'createTransport']) - ->setArguments([$transport['dsn'], $transport['options']]) + ->setArguments([$transport['dsn'], $transport['options'], new Reference($serializerId)]) ->addTag('messenger.receiver', ['alias' => $name]) ; $container->setDefinition($transportId = 'messenger.transport.'.$name, $transportDefinition); diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml index 55976d1c02269..1720ea72e71aa 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml @@ -26,7 +26,7 @@ - + @@ -64,7 +64,6 @@ - diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd b/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd index 4a2705b950874..0415fa9559c54 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd @@ -402,7 +402,8 @@ - + + @@ -412,12 +413,11 @@ - + - @@ -437,6 +437,7 @@ + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php index 88eb6529ed68d..bc1ee582fc081 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php @@ -325,8 +325,8 @@ class_exists(SemaphoreStore::class) && SemaphoreStore::isSupported() ? 'semaphor 'enabled' => !class_exists(FullStack::class) && interface_exists(MessageBusInterface::class), 'routing' => [], 'transports' => [], - 'serializer' => [ - 'id' => 'messenger.transport.native_php_serializer', + 'default_serializer' => 'messenger.transport.native_php_serializer', + 'symfony_serializer' => [ 'format' => 'json', 'context' => [], ], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php index d0a234eccc4b5..c74b64f3ffb1d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php @@ -5,7 +5,7 @@ $container->loadFromExtension('framework', [ 'messenger' => [ - 'serializer' => false, + 'default_serializer' => false, 'routing' => [ FooMessage::class => ['sender.bar', 'sender.biz'], BarMessage::class => 'sender.foo', diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_amqp_transport_no_serializer.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_amqp_transport_no_serializer.php deleted file mode 100644 index 10d31660f90b7..0000000000000 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_amqp_transport_no_serializer.php +++ /dev/null @@ -1,10 +0,0 @@ -loadFromExtension('framework', [ - 'messenger' => [ - 'serializer' => false, - 'transports' => [ - 'default' => 'amqp://localhost/%2f/messages', - ], - ], -]); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing.php index 08aae8f27d763..6e0b7c61f1297 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing.php @@ -3,7 +3,7 @@ $container->loadFromExtension('framework', [ 'serializer' => true, 'messenger' => [ - 'serializer' => 'messenger.transport.symfony_serializer', + 'default_serializer' => 'messenger.transport.symfony_serializer', 'routing' => [ 'Symfony\Component\Messenger\Tests\Fixtures\DummyMessage' => ['amqp', 'audit'], 'Symfony\Component\Messenger\Tests\Fixtures\SecondMessage' => [ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport.php index cab5efe30a631..6a1c729fd460b 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport.php @@ -3,8 +3,8 @@ $container->loadFromExtension('framework', [ 'serializer' => true, 'messenger' => [ - 'serializer' => [ - 'id' => 'messenger.transport.symfony_serializer', + 'default_serializer' => 'messenger.transport.symfony_serializer', + 'symfony_serializer' => [ 'format' => 'csv', 'context' => ['enable_max_depth' => true], ], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport_no_serializer.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport_no_serializer.php deleted file mode 100644 index 7580c3c1e5751..0000000000000 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport_no_serializer.php +++ /dev/null @@ -1,13 +0,0 @@ -loadFromExtension('framework', [ - 'serializer' => [ - 'enabled' => false, - ], - 'messenger' => [ - 'serializer' => 'messenger.transport.symfony_serializer', - 'transports' => [ - 'default' => 'amqp://localhost/%2f/messages', - ], - ], -]); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transports.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transports.php index fd4b6feee71b2..a326c505e62b2 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transports.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transports.php @@ -3,12 +3,13 @@ $container->loadFromExtension('framework', [ 'serializer' => true, 'messenger' => [ - 'serializer' => 'messenger.transport.symfony_serializer', + 'default_serializer' => 'messenger.transport.symfony_serializer', 'transports' => [ 'default' => 'amqp://localhost/%2f/messages', 'customised' => [ 'dsn' => 'amqp://localhost/%2f/messages?exchange_name=exchange_name', 'options' => ['queue' => ['name' => 'Queue']], + 'serializer' => 'messenger.transport.native_php_serializer', ], ], ], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_amqp_transport_no_serializer.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_amqp_transport_no_serializer.xml deleted file mode 100644 index b030604466c40..0000000000000 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_amqp_transport_no_serializer.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing.xml index ccb93ba7f0330..6231a7a82e98a 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing.xml @@ -8,7 +8,7 @@ - + messenger.transport.symfony_serializer diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport.xml index c58fc9a5d4758..82a85aedcc849 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport.xml @@ -8,11 +8,12 @@ - + messenger.transport.symfony_serializer + true - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport_no_serializer.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport_no_serializer.xml deleted file mode 100644 index 7471f32e683d8..0000000000000 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport_no_serializer.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transports.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transports.xml index ceaba5bfc8f6d..70cdb69a8ada4 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transports.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transports.xml @@ -8,9 +8,9 @@ - + messenger.transport.symfony_serializer - + Queue diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml index 0983f2ef321ee..42df49ea4d1cb 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml @@ -1,6 +1,6 @@ framework: messenger: - serializer: false + default_serializer: false routing: 'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\FooMessage': ['sender.bar', 'sender.biz'] 'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\BarMessage': 'sender.foo' diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_amqp_transport_no_serializer.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_amqp_transport_no_serializer.yml deleted file mode 100644 index e31f3275a479b..0000000000000 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_amqp_transport_no_serializer.yml +++ /dev/null @@ -1,5 +0,0 @@ -framework: - messenger: - serializer: false - transports: - default: 'amqp://localhost/%2f/messages' diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing.yml index 1eedbbd03d0e6..4481a16d46033 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing.yml @@ -1,7 +1,7 @@ framework: serializer: true messenger: - serializer: messenger.transport.symfony_serializer + default_serializer: messenger.transport.symfony_serializer routing: 'Symfony\Component\Messenger\Tests\Fixtures\DummyMessage': [amqp, audit] 'Symfony\Component\Messenger\Tests\Fixtures\SecondMessage': diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport.yml index 05b2083e0abdc..8740f37bd6ec1 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport.yml @@ -1,8 +1,8 @@ framework: serializer: true messenger: - serializer: - id: messenger.transport.symfony_serializer + default_serializer: messenger.transport.symfony_serializer + symfony_serializer: format: csv context: enable_max_depth: true diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport_no_serializer.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport_no_serializer.yml deleted file mode 100644 index bde0d3537d57b..0000000000000 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport_no_serializer.yml +++ /dev/null @@ -1,7 +0,0 @@ -framework: - serializer: - enabled: false - messenger: - serializer: messenger.transport.symfony_serializer - transports: - default: 'amqp://localhost/%2f/messages' diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transports.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transports.yml index 6d2c535b72f80..48ff8c6c82364 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transports.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transports.yml @@ -1,7 +1,7 @@ framework: serializer: true messenger: - serializer: messenger.transport.symfony_serializer + default_serializer: messenger.transport.symfony_serializer transports: default: 'amqp://localhost/%2f/messages' customised: @@ -9,3 +9,4 @@ framework: options: queue: name: Queue + serializer: 'messenger.transport.native_php_serializer' diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php index 6649315f9b0ce..e2cd21cd1dffd 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php @@ -661,15 +661,18 @@ public function testMessengerTransports() $this->assertTrue($container->hasDefinition('messenger.transport.default')); $this->assertTrue($container->getDefinition('messenger.transport.default')->hasTag('messenger.receiver')); $this->assertEquals([['alias' => 'default']], $container->getDefinition('messenger.transport.default')->getTag('messenger.receiver')); + $transportArguments = $container->getDefinition('messenger.transport.default')->getArguments(); + $this->assertEquals(new Reference('messenger.default_serializer'), $transportArguments[2]); $this->assertTrue($container->hasDefinition('messenger.transport.customised')); $transportFactory = $container->getDefinition('messenger.transport.customised')->getFactory(); $transportArguments = $container->getDefinition('messenger.transport.customised')->getArguments(); $this->assertEquals([new Reference('messenger.transport_factory'), 'createTransport'], $transportFactory); - $this->assertCount(2, $transportArguments); + $this->assertCount(3, $transportArguments); $this->assertSame('amqp://localhost/%2f/messages?exchange_name=exchange_name', $transportArguments[0]); - $this->assertSame(['queue' => ['name' => 'Queue']], $transportArguments[1]); + $this->assertEquals(['queue' => ['name' => 'Queue']], $transportArguments[1]); + $this->assertEquals(new Reference('messenger.transport.native_php_serializer'), $transportArguments[2]); $this->assertTrue($container->hasDefinition('messenger.transport.amqp.factory')); } @@ -693,29 +696,11 @@ public function testMessengerRouting() ], $sendersMapping[DummyMessage::class]->getValues()); } - /** - * @expectedException \Symfony\Component\DependencyInjection\Exception\LogicException - * @expectedExceptionMessage The Messenger serializer cannot be enabled as the Serializer support is not available. Try enabling it or running "composer require symfony/serializer-pack". - */ - public function testMessengerTransportConfigurationWithoutSerializer() - { - $this->createContainerFromFile('messenger_transport_no_serializer'); - } - - /** - * @expectedException \Symfony\Component\DependencyInjection\Exception\LogicException - * @expectedExceptionMessage 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". - */ - public function testMessengerAMQPTransportConfigurationWithoutSerializer() - { - $this->createContainerFromFile('messenger_amqp_transport_no_serializer'); - } - public function testMessengerTransportConfiguration() { $container = $this->createContainerFromFile('messenger_transport'); - $this->assertSame('messenger.transport.symfony_serializer', (string) $container->getAlias('messenger.transport.serializer')); + $this->assertSame('messenger.transport.symfony_serializer', (string) $container->getAlias('messenger.default_serializer')); $serializerTransportDefinition = $container->getDefinition('messenger.transport.symfony_serializer'); $this->assertSame('csv', $serializerTransportDefinition->getArgument(1)); diff --git a/src/Symfony/Component/Messenger/CHANGELOG.md b/src/Symfony/Component/Messenger/CHANGELOG.md index 304790630b759..a2f94de63d406 100644 --- a/src/Symfony/Component/Messenger/CHANGELOG.md +++ b/src/Symfony/Component/Messenger/CHANGELOG.md @@ -4,10 +4,12 @@ CHANGELOG 4.3.0 ----- + * [BC BREAK] The `TransportFactoryInterface::createTransport()` signature + changed: a required 3rd `SerializerInterface` argument was added. * Added a new `SyncTransport` along with `ForceCallHandlersStamp` to explicitly handle messages synchronously. * Added optional parameter `prefetch_count` in connection configuration, - to setup channel prefetch count + to setup channel prefetch count. * New classes: `RoutableMessageBus`, `AddBusNameStampMiddleware` and `BusNameStamp` were added, which allow you to add a bus identifier to the `Envelope` then find the correct bus when receiving from diff --git a/src/Symfony/Component/Messenger/Tests/Transport/AmqpExt/AmqpTransportFactoryTest.php b/src/Symfony/Component/Messenger/Tests/Transport/AmqpExt/AmqpTransportFactoryTest.php index 8e4d66ff3e63a..60d5e806e357c 100644 --- a/src/Symfony/Component/Messenger/Tests/Transport/AmqpExt/AmqpTransportFactoryTest.php +++ b/src/Symfony/Component/Messenger/Tests/Transport/AmqpExt/AmqpTransportFactoryTest.php @@ -21,9 +21,7 @@ class AmqpTransportFactoryTest extends TestCase { public function testSupportsOnlyAmqpTransports() { - $factory = new AmqpTransportFactory( - $this->getMockBuilder(SerializerInterface::class)->getMock() - ); + $factory = new AmqpTransportFactory(); $this->assertTrue($factory->supports('amqp://localhost', [])); $this->assertFalse($factory->supports('sqs://localhost', [])); @@ -32,12 +30,11 @@ public function testSupportsOnlyAmqpTransports() public function testItCreatesTheTransport() { - $factory = new AmqpTransportFactory( - $serializer = $this->getMockBuilder(SerializerInterface::class)->getMock() - ); + $factory = new AmqpTransportFactory(); + $serializer = $this->createMock(SerializerInterface::class); $expectedTransport = new AmqpTransport(Connection::fromDsn('amqp://localhost', ['foo' => 'bar']), $serializer); - $this->assertEquals($expectedTransport, $factory->createTransport('amqp://localhost', ['foo' => 'bar'])); + $this->assertEquals($expectedTransport, $factory->createTransport('amqp://localhost', ['foo' => 'bar'], $serializer)); } } diff --git a/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpTransportFactory.php b/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpTransportFactory.php index 28c826891945c..d4293e12070dd 100644 --- a/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpTransportFactory.php +++ b/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpTransportFactory.php @@ -11,7 +11,6 @@ namespace Symfony\Component\Messenger\Transport\AmqpExt; -use Symfony\Component\Messenger\Transport\Serialization\PhpSerializer; use Symfony\Component\Messenger\Transport\Serialization\SerializerInterface; use Symfony\Component\Messenger\Transport\TransportFactoryInterface; use Symfony\Component\Messenger\Transport\TransportInterface; @@ -23,16 +22,9 @@ */ class AmqpTransportFactory implements TransportFactoryInterface { - private $serializer; - - public function __construct(SerializerInterface $serializer = null) - { - $this->serializer = $serializer ?? new PhpSerializer(); - } - - public function createTransport(string $dsn, array $options): TransportInterface + public function createTransport(string $dsn, array $options, SerializerInterface $serializer): TransportInterface { - return new AmqpTransport(Connection::fromDsn($dsn, $options), $this->serializer); + return new AmqpTransport(Connection::fromDsn($dsn, $options), $serializer); } public function supports(string $dsn, array $options): bool diff --git a/src/Symfony/Component/Messenger/Transport/TransportFactory.php b/src/Symfony/Component/Messenger/Transport/TransportFactory.php index 6c447f6844555..89833fac3bf5e 100644 --- a/src/Symfony/Component/Messenger/Transport/TransportFactory.php +++ b/src/Symfony/Component/Messenger/Transport/TransportFactory.php @@ -12,6 +12,7 @@ namespace Symfony\Component\Messenger\Transport; use Symfony\Component\Messenger\Exception\InvalidArgumentException; +use Symfony\Component\Messenger\Transport\Serialization\SerializerInterface; /** * @author Samuel Roze @@ -30,11 +31,11 @@ public function __construct(iterable $factories) $this->factories = $factories; } - public function createTransport(string $dsn, array $options): TransportInterface + public function createTransport(string $dsn, array $options, SerializerInterface $serializer): TransportInterface { foreach ($this->factories as $factory) { if ($factory->supports($dsn, $options)) { - return $factory->createTransport($dsn, $options); + return $factory->createTransport($dsn, $options, $serializer); } } diff --git a/src/Symfony/Component/Messenger/Transport/TransportFactoryInterface.php b/src/Symfony/Component/Messenger/Transport/TransportFactoryInterface.php index 4c1d9539fbd51..7c3c3a65cdb0e 100644 --- a/src/Symfony/Component/Messenger/Transport/TransportFactoryInterface.php +++ b/src/Symfony/Component/Messenger/Transport/TransportFactoryInterface.php @@ -11,6 +11,8 @@ namespace Symfony\Component\Messenger\Transport; +use Symfony\Component\Messenger\Transport\Serialization\SerializerInterface; + /** * Creates a Messenger transport. * @@ -20,7 +22,7 @@ */ interface TransportFactoryInterface { - public function createTransport(string $dsn, array $options): TransportInterface; + public function createTransport(string $dsn, array $options, SerializerInterface $serializer): TransportInterface; public function supports(string $dsn, array $options): bool; }