Relax Messenger config and fix some bugs

This commit is contained in:
Yonel Ceruto 2018-04-27 23:07:51 -04:00
parent cada38f520
commit a05e2e2c3b
19 changed files with 73 additions and 6 deletions

View File

@ -1010,7 +1010,7 @@ class Configuration implements ConfigurationInterface
->end() ->end()
->end() ->end()
->arrayNode('serializer') ->arrayNode('serializer')
->canBeDisabled() ->{!class_exists(FullStack::class) && class_exists(Serializer::class) ? 'canBeDisabled' : 'canBeEnabled'}()
->addDefaultsIfNotSet() ->addDefaultsIfNotSet()
->children() ->children()
->scalarNode('format')->defaultValue('json')->end() ->scalarNode('format')->defaultValue('json')->end()

View File

@ -1449,8 +1449,8 @@ class FrameworkExtension extends Extension
$loader->load('messenger.xml'); $loader->load('messenger.xml');
if ($this->isConfigEnabled($container, $config['serializer'])) { if ($this->isConfigEnabled($container, $config['serializer'])) {
if (\count($config['transports']) > 0 && !$this->isConfigEnabled($container, $serializerConfig)) { if (!$this->isConfigEnabled($container, $serializerConfig)) {
throw new LogicException('Using the default encoder/decoder, Symfony Messenger requires the Serializer. Enable it or install it by running "composer require symfony/serializer-pack".'); throw new LogicException('The default Messenger serializer cannot be enabled as the Serializer support is not available. Try enable it or install it by running "composer require symfony/serializer-pack".');
} }
$container->getDefinition('messenger.transport.serializer') $container->getDefinition('messenger.transport.serializer')
@ -1458,6 +1458,9 @@ class FrameworkExtension extends Extension
->replaceArgument(2, $config['serializer']['context']); ->replaceArgument(2, $config['serializer']['context']);
} else { } else {
$container->removeDefinition('messenger.transport.serializer'); $container->removeDefinition('messenger.transport.serializer');
if ('messenger.transport.serializer' === $config['encoder'] || 'messenger.transport.serializer' === $config['decoder']) {
$container->removeDefinition('messenger.transport.amqp.factory');
}
} }
$container->setAlias('messenger.transport.encoder', $config['encoder']); $container->setAlias('messenger.transport.encoder', $config['encoder']);
@ -1506,6 +1509,10 @@ class FrameworkExtension extends Extension
$container->getDefinition('messenger.asynchronous.routing.sender_locator')->replaceArgument(1, $messageToSenderIdsMapping); $container->getDefinition('messenger.asynchronous.routing.sender_locator')->replaceArgument(1, $messageToSenderIdsMapping);
foreach ($config['transports'] as $name => $transport) { 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 enable it or install it by running "composer require symfony/serializer-pack".');
}
$senderDefinition = (new Definition(SenderInterface::class)) $senderDefinition = (new Definition(SenderInterface::class))
->setFactory(array(new Reference('messenger.transport_factory'), 'createSender')) ->setFactory(array(new Reference('messenger.transport_factory'), 'createSender'))
->setArguments(array($transport['dsn'], $transport['options'])) ->setArguments(array($transport['dsn'], $transport['options']))

View File

@ -256,7 +256,7 @@ class ConfigurationTest extends TestCase
'routing' => array(), 'routing' => array(),
'transports' => array(), 'transports' => array(),
'serializer' => array( 'serializer' => array(
'enabled' => true, 'enabled' => !class_exists(FullStack::class),
'format' => 'json', 'format' => 'json',
'context' => array(), 'context' => array(),
), ),

View File

@ -5,6 +5,7 @@ use Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\BarMessage;
$container->loadFromExtension('framework', array( $container->loadFromExtension('framework', array(
'messenger' => array( 'messenger' => array(
'serializer' => false,
'routing' => array( 'routing' => array(
FooMessage::class => array('sender.bar', 'sender.biz'), FooMessage::class => array('sender.bar', 'sender.biz'),
BarMessage::class => 'sender.foo', BarMessage::class => 'sender.foo',

View File

@ -0,0 +1,12 @@
<?php
$container->loadFromExtension('framework', array(
'messenger' => array(
'serializer' => array(
'enabled' => false,
),
'transports' => array(
'default' => 'amqp://localhost/%2f/messages',
),
),
));

View File

@ -1,6 +1,7 @@
<?php <?php
$container->loadFromExtension('framework', array( $container->loadFromExtension('framework', array(
'serializer' => true,
'messenger' => array( 'messenger' => array(
'serializer' => array( 'serializer' => array(
'format' => 'csv', 'format' => 'csv',

View File

@ -3,6 +3,7 @@
$container->loadFromExtension('framework', array( $container->loadFromExtension('framework', array(
'serializer' => true, 'serializer' => true,
'messenger' => array( 'messenger' => array(
'serializer' => true,
'transports' => array( 'transports' => array(
'default' => 'amqp://localhost/%2f/messages', 'default' => 'amqp://localhost/%2f/messages',
'customised' => array( 'customised' => array(

View File

@ -4,4 +4,7 @@ $container->loadFromExtension('framework', array(
'serializer' => array( 'serializer' => array(
'enabled' => false, 'enabled' => false,
), ),
'messenger' => array(
'serializer' => false,
),
)); ));

View File

@ -7,6 +7,7 @@
<framework:config> <framework:config>
<framework:messenger> <framework:messenger>
<framework:serializer enabled="false" />
<framework:routing message-class="Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\FooMessage"> <framework:routing message-class="Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\FooMessage">
<framework:sender service="sender.bar" /> <framework:sender service="sender.bar" />
<framework:sender service="sender.biz" /> <framework:sender service="sender.biz" />

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:framework="http://symfony.com/schema/dic/symfony"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
<framework:config>
<framework:messenger>
<framework:serializer enabled="false" />
<framework:transport name="default" dsn="amqp://localhost/%2f/messages" />
</framework:messenger>
</framework:config>
</container>

View File

@ -6,6 +6,7 @@
http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd"> http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
<framework:config> <framework:config>
<framework:serializer enabled="true" />
<framework:messenger> <framework:messenger>
<framework:serializer format="csv"> <framework:serializer format="csv">
<framework:context> <framework:context>

View File

@ -8,6 +8,7 @@
<framework:config> <framework:config>
<framework:serializer enabled="true" /> <framework:serializer enabled="true" />
<framework:messenger> <framework:messenger>
<framework:serializer enabled="true" />
<framework:transport name="default" dsn="amqp://localhost/%2f/messages" /> <framework:transport name="default" dsn="amqp://localhost/%2f/messages" />
<framework:transport name="customised" dsn="amqp://localhost/%2f/messages?exchange_name=exchange_name"> <framework:transport name="customised" dsn="amqp://localhost/%2f/messages?exchange_name=exchange_name">
<framework:options> <framework:options>

View File

@ -7,5 +7,8 @@
<framework:config> <framework:config>
<framework:serializer enabled="false" /> <framework:serializer enabled="false" />
<framework:messenger>
<framework:serializer enabled="false" />
</framework:messenger>
</framework:config> </framework:config>
</container> </container>

View File

@ -1,5 +1,6 @@
framework: framework:
messenger: messenger:
serializer: false
routing: routing:
'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\FooMessage': ['sender.bar', 'sender.biz'] 'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\FooMessage': ['sender.bar', 'sender.biz']
'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\BarMessage': 'sender.foo' 'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\BarMessage': 'sender.foo'

View File

@ -0,0 +1,5 @@
framework:
messenger:
serializer: false
transports:
default: 'amqp://localhost/%2f/messages'

View File

@ -1,4 +1,5 @@
framework: framework:
serializer: true
messenger: messenger:
serializer: serializer:
format: csv format: csv

View File

@ -1,6 +1,7 @@
framework: framework:
serializer: true serializer: true
messenger: messenger:
serializer: true
transports: transports:
default: 'amqp://localhost/%2f/messages' default: 'amqp://localhost/%2f/messages'
customised: customised:

View File

@ -1,3 +1,5 @@
framework: framework:
serializer: serializer:
enabled: false enabled: false
messenger:
serializer: false

View File

@ -526,7 +526,8 @@ abstract class FrameworkExtensionTest extends TestCase
public function testMessenger() public function testMessenger()
{ {
$container = $this->createContainerFromFile('messenger'); $container = $this->createContainerFromFile('messenger');
$this->assertTrue($container->has('message_bus')); $this->assertTrue($container->hasAlias('message_bus'));
$this->assertFalse($container->hasDefinition('messenger.transport.amqp.factory'));
} }
public function testMessengerTransports() public function testMessengerTransports()
@ -556,6 +557,8 @@ abstract class FrameworkExtensionTest extends TestCase
$this->assertCount(2, $receiverArguments); $this->assertCount(2, $receiverArguments);
$this->assertSame('amqp://localhost/%2f/messages?exchange_name=exchange_name', $receiverArguments[0]); $this->assertSame('amqp://localhost/%2f/messages?exchange_name=exchange_name', $receiverArguments[0]);
$this->assertSame(array('queue' => array('name' => 'Queue')), $receiverArguments[1]); $this->assertSame(array('queue' => array('name' => 'Queue')), $receiverArguments[1]);
$this->assertTrue($container->hasDefinition('messenger.transport.amqp.factory'));
} }
public function testMessengerRouting() public function testMessengerRouting()
@ -574,13 +577,22 @@ abstract class FrameworkExtensionTest extends TestCase
/** /**
* @expectedException \Symfony\Component\DependencyInjection\Exception\LogicException * @expectedException \Symfony\Component\DependencyInjection\Exception\LogicException
* @expectedExceptionMessage Using the default encoder/decoder, Symfony Messenger requires the Serializer. Enable it or install it by running "composer require symfony/serializer-pack". * @expectedExceptionMessage The default Messenger serializer cannot be enabled as the Serializer support is not available. Try enable it or install it by running "composer require symfony/serializer-pack".
*/ */
public function testMessengerTransportConfigurationWithoutSerializer() public function testMessengerTransportConfigurationWithoutSerializer()
{ {
$this->createContainerFromFile('messenger_transport_no_serializer'); $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 enable it or install it by running "composer require symfony/serializer-pack".
*/
public function testMessengerAMQPTransportConfigurationWithoutSerializer()
{
$this->createContainerFromFile('messenger_amqp_transport_no_serializer');
}
public function testMessengerTransportConfiguration() public function testMessengerTransportConfiguration()
{ {
$container = $this->createContainerFromFile('messenger_transport'); $container = $this->createContainerFromFile('messenger_transport');