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()
->arrayNode('serializer')
->canBeDisabled()
->{!class_exists(FullStack::class) && class_exists(Serializer::class) ? 'canBeDisabled' : 'canBeEnabled'}()
->addDefaultsIfNotSet()
->children()
->scalarNode('format')->defaultValue('json')->end()

View File

@ -1449,8 +1449,8 @@ class FrameworkExtension extends Extension
$loader->load('messenger.xml');
if ($this->isConfigEnabled($container, $config['serializer'])) {
if (\count($config['transports']) > 0 && !$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".');
if (!$this->isConfigEnabled($container, $serializerConfig)) {
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')
@ -1458,6 +1458,9 @@ class FrameworkExtension extends Extension
->replaceArgument(2, $config['serializer']['context']);
} else {
$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']);
@ -1506,6 +1509,10 @@ class FrameworkExtension extends Extension
$container->getDefinition('messenger.asynchronous.routing.sender_locator')->replaceArgument(1, $messageToSenderIdsMapping);
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))
->setFactory(array(new Reference('messenger.transport_factory'), 'createSender'))
->setArguments(array($transport['dsn'], $transport['options']))

View File

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

View File

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

View File

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

View File

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

View File

@ -7,6 +7,7 @@
<framework:config>
<framework:messenger>
<framework:serializer enabled="false" />
<framework:routing message-class="Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\FooMessage">
<framework:sender service="sender.bar" />
<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">
<framework:config>
<framework:serializer enabled="true" />
<framework:messenger>
<framework:serializer format="csv">
<framework:context>

View File

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

View File

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

View File

@ -1,5 +1,6 @@
framework:
messenger:
serializer: false
routing:
'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\FooMessage': ['sender.bar', 'sender.biz']
'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:
serializer: true
messenger:
serializer:
format: csv

View File

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

View File

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

View File

@ -526,7 +526,8 @@ abstract class FrameworkExtensionTest extends TestCase
public function testMessenger()
{
$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()
@ -556,6 +557,8 @@ abstract class FrameworkExtensionTest extends TestCase
$this->assertCount(2, $receiverArguments);
$this->assertSame('amqp://localhost/%2f/messages?exchange_name=exchange_name', $receiverArguments[0]);
$this->assertSame(array('queue' => array('name' => 'Queue')), $receiverArguments[1]);
$this->assertTrue($container->hasDefinition('messenger.transport.amqp.factory'));
}
public function testMessengerRouting()
@ -574,13 +577,22 @@ abstract class FrameworkExtensionTest extends TestCase
/**
* @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()
{
$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()
{
$container = $this->createContainerFromFile('messenger_transport');