Relax Messenger config and fix some bugs
This commit is contained in:
parent
cada38f520
commit
a05e2e2c3b
@ -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()
|
||||
|
@ -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']))
|
||||
|
@ -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(),
|
||||
),
|
||||
|
@ -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',
|
||||
|
@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
$container->loadFromExtension('framework', array(
|
||||
'messenger' => array(
|
||||
'serializer' => array(
|
||||
'enabled' => false,
|
||||
),
|
||||
'transports' => array(
|
||||
'default' => 'amqp://localhost/%2f/messages',
|
||||
),
|
||||
),
|
||||
));
|
@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
$container->loadFromExtension('framework', array(
|
||||
'serializer' => true,
|
||||
'messenger' => array(
|
||||
'serializer' => array(
|
||||
'format' => 'csv',
|
||||
|
@ -3,6 +3,7 @@
|
||||
$container->loadFromExtension('framework', array(
|
||||
'serializer' => true,
|
||||
'messenger' => array(
|
||||
'serializer' => true,
|
||||
'transports' => array(
|
||||
'default' => 'amqp://localhost/%2f/messages',
|
||||
'customised' => array(
|
||||
|
@ -4,4 +4,7 @@ $container->loadFromExtension('framework', array(
|
||||
'serializer' => array(
|
||||
'enabled' => false,
|
||||
),
|
||||
'messenger' => array(
|
||||
'serializer' => false,
|
||||
),
|
||||
));
|
||||
|
@ -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" />
|
||||
|
@ -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>
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -7,5 +7,8 @@
|
||||
|
||||
<framework:config>
|
||||
<framework:serializer enabled="false" />
|
||||
<framework:messenger>
|
||||
<framework:serializer enabled="false" />
|
||||
</framework:messenger>
|
||||
</framework:config>
|
||||
</container>
|
||||
|
@ -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'
|
||||
|
@ -0,0 +1,5 @@
|
||||
framework:
|
||||
messenger:
|
||||
serializer: false
|
||||
transports:
|
||||
default: 'amqp://localhost/%2f/messages'
|
@ -1,4 +1,5 @@
|
||||
framework:
|
||||
serializer: true
|
||||
messenger:
|
||||
serializer:
|
||||
format: csv
|
||||
|
@ -1,6 +1,7 @@
|
||||
framework:
|
||||
serializer: true
|
||||
messenger:
|
||||
serializer: true
|
||||
transports:
|
||||
default: 'amqp://localhost/%2f/messages'
|
||||
customised:
|
||||
|
@ -1,3 +1,5 @@
|
||||
framework:
|
||||
serializer:
|
||||
enabled: false
|
||||
messenger:
|
||||
serializer: false
|
||||
|
@ -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');
|
||||
|
Reference in New Issue
Block a user