[Messenger][DX] Uses the adapter name instead of the service name
This commit is contained in:
parent
86887ef3f9
commit
b5afb40441
@ -1446,19 +1446,11 @@ class FrameworkExtension extends Extension
|
|||||||
|
|
||||||
$loader->load('messenger.xml');
|
$loader->load('messenger.xml');
|
||||||
|
|
||||||
$senderLocatorMapping = array();
|
|
||||||
$messageToSenderIdsMapping = array();
|
$messageToSenderIdsMapping = array();
|
||||||
foreach ($config['routing'] as $message => $messageConfiguration) {
|
foreach ($config['routing'] as $message => $messageConfiguration) {
|
||||||
foreach ($messageConfiguration['senders'] as $sender) {
|
|
||||||
if (null !== $sender) {
|
|
||||||
$senderLocatorMapping[$sender] = new Reference($sender);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$messageToSenderIdsMapping[$message] = $messageConfiguration['senders'];
|
$messageToSenderIdsMapping[$message] = $messageConfiguration['senders'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$container->getDefinition('messenger.sender_locator')->replaceArgument(0, $senderLocatorMapping);
|
|
||||||
$container->getDefinition('messenger.asynchronous.routing.sender_locator')->replaceArgument(1, $messageToSenderIdsMapping);
|
$container->getDefinition('messenger.asynchronous.routing.sender_locator')->replaceArgument(1, $messageToSenderIdsMapping);
|
||||||
|
|
||||||
if ($config['middlewares']['validation']['enabled']) {
|
if ($config['middlewares']['validation']['enabled']) {
|
||||||
@ -1476,7 +1468,7 @@ class FrameworkExtension extends Extension
|
|||||||
))->setArguments(array(
|
))->setArguments(array(
|
||||||
$adapter['dsn'],
|
$adapter['dsn'],
|
||||||
$adapter['options'],
|
$adapter['options'],
|
||||||
))->addTag('messenger.sender'));
|
))->addTag('messenger.sender', array('name' => $name)));
|
||||||
|
|
||||||
$container->setDefinition('messenger.receiver.'.$name, (new Definition(ReceiverInterface::class))->setFactory(array(
|
$container->setDefinition('messenger.receiver.'.$name, (new Definition(ReceiverInterface::class))->setFactory(array(
|
||||||
new Reference('messenger.adapter_factory'),
|
new Reference('messenger.adapter_factory'),
|
||||||
@ -1484,7 +1476,7 @@ class FrameworkExtension extends Extension
|
|||||||
))->setArguments(array(
|
))->setArguments(array(
|
||||||
$adapter['dsn'],
|
$adapter['dsn'],
|
||||||
$adapter['options'],
|
$adapter['options'],
|
||||||
))->addTag('messenger.receiver'));
|
))->addTag('messenger.receiver', array('name' => $name)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -544,8 +544,10 @@ abstract class FrameworkExtensionTest extends TestCase
|
|||||||
$container = $this->createContainerFromFile('messenger_adapter');
|
$container = $this->createContainerFromFile('messenger_adapter');
|
||||||
$this->assertTrue($container->hasDefinition('messenger.sender.default'));
|
$this->assertTrue($container->hasDefinition('messenger.sender.default'));
|
||||||
$this->assertTrue($container->getDefinition('messenger.sender.default')->hasTag('messenger.sender'));
|
$this->assertTrue($container->getDefinition('messenger.sender.default')->hasTag('messenger.sender'));
|
||||||
|
$this->assertEquals(array(array('name' => 'default')), $container->getDefinition('messenger.sender.default')->getTag('messenger.sender'));
|
||||||
$this->assertTrue($container->hasDefinition('messenger.receiver.default'));
|
$this->assertTrue($container->hasDefinition('messenger.receiver.default'));
|
||||||
$this->assertTrue($container->getDefinition('messenger.receiver.default')->hasTag('messenger.receiver'));
|
$this->assertTrue($container->getDefinition('messenger.receiver.default')->hasTag('messenger.receiver'));
|
||||||
|
$this->assertEquals(array(array('name' => 'default')), $container->getDefinition('messenger.receiver.default')->getTag('messenger.receiver'));
|
||||||
|
|
||||||
$this->assertTrue($container->hasDefinition('messenger.sender.customised'));
|
$this->assertTrue($container->hasDefinition('messenger.sender.customised'));
|
||||||
$senderFactory = $container->getDefinition('messenger.sender.customised')->getFactory();
|
$senderFactory = $container->getDefinition('messenger.sender.customised')->getFactory();
|
||||||
@ -553,8 +555,8 @@ abstract class FrameworkExtensionTest extends TestCase
|
|||||||
|
|
||||||
$this->assertEquals(array(new Reference('messenger.adapter_factory'), 'createSender'), $senderFactory);
|
$this->assertEquals(array(new Reference('messenger.adapter_factory'), 'createSender'), $senderFactory);
|
||||||
$this->assertCount(2, $senderArguments);
|
$this->assertCount(2, $senderArguments);
|
||||||
$this->assertEquals('amqp://localhost/%2f/messages?exchange_name=exchange_name', $senderArguments[0]);
|
$this->assertSame('amqp://localhost/%2f/messages?exchange_name=exchange_name', $senderArguments[0]);
|
||||||
$this->assertEquals(array('queue_name' => 'Queue'), $senderArguments[1]);
|
$this->assertSame(array('queue_name' => 'Queue'), $senderArguments[1]);
|
||||||
|
|
||||||
$this->assertTrue($container->hasDefinition('messenger.receiver.customised'));
|
$this->assertTrue($container->hasDefinition('messenger.receiver.customised'));
|
||||||
$receiverFactory = $container->getDefinition('messenger.receiver.customised')->getFactory();
|
$receiverFactory = $container->getDefinition('messenger.receiver.customised')->getFactory();
|
||||||
@ -562,8 +564,8 @@ abstract class FrameworkExtensionTest extends TestCase
|
|||||||
|
|
||||||
$this->assertEquals(array(new Reference('messenger.adapter_factory'), 'createReceiver'), $receiverFactory);
|
$this->assertEquals(array(new Reference('messenger.adapter_factory'), 'createReceiver'), $receiverFactory);
|
||||||
$this->assertCount(2, $receiverArguments);
|
$this->assertCount(2, $receiverArguments);
|
||||||
$this->assertEquals('amqp://localhost/%2f/messages?exchange_name=exchange_name', $receiverArguments[0]);
|
$this->assertSame('amqp://localhost/%2f/messages?exchange_name=exchange_name', $receiverArguments[0]);
|
||||||
$this->assertEquals(array('queue_name' => 'Queue'), $receiverArguments[1]);
|
$this->assertSame(array('queue_name' => 'Queue'), $receiverArguments[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testTranslator()
|
public function testTranslator()
|
||||||
|
@ -60,6 +60,7 @@ class MessengerPass implements CompilerPassInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
$this->registerReceivers($container);
|
$this->registerReceivers($container);
|
||||||
|
$this->registerSenders($container);
|
||||||
$this->registerHandlers($container);
|
$this->registerHandlers($container);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -156,10 +157,26 @@ class MessengerPass implements CompilerPassInterface
|
|||||||
$receiverMapping = array();
|
$receiverMapping = array();
|
||||||
foreach ($container->findTaggedServiceIds('messenger.receiver') as $id => $tags) {
|
foreach ($container->findTaggedServiceIds('messenger.receiver') as $id => $tags) {
|
||||||
foreach ($tags as $tag) {
|
foreach ($tags as $tag) {
|
||||||
$receiverMapping[$tag['id'] ?? $id] = new Reference($id);
|
$receiverMapping[$tag['name'] ?? $id] = new Reference($id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$container->getDefinition('messenger.receiver_locator')->replaceArgument(0, $receiverMapping);
|
$container->getDefinition('messenger.receiver_locator')->replaceArgument(0, $receiverMapping);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function registerSenders(ContainerBuilder $container)
|
||||||
|
{
|
||||||
|
$senderLocatorMapping = array();
|
||||||
|
foreach ($container->findTaggedServiceIds('messenger.sender') as $id => $tags) {
|
||||||
|
foreach ($tags as $tag) {
|
||||||
|
$senderLocatorMapping[$id] = new Reference($id);
|
||||||
|
|
||||||
|
if ($tag['name']) {
|
||||||
|
$senderLocatorMapping[$tag['name']] = new Reference($id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$container->getDefinition('messenger.sender_locator')->replaceArgument(0, $senderLocatorMapping);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,8 @@ use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument;
|
|||||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
use Symfony\Component\DependencyInjection\Reference;
|
use Symfony\Component\DependencyInjection\Reference;
|
||||||
use Symfony\Component\DependencyInjection\ServiceLocator;
|
use Symfony\Component\DependencyInjection\ServiceLocator;
|
||||||
|
use Symfony\Component\Messenger\Adapter\AmqpExt\AmqpReceiver;
|
||||||
|
use Symfony\Component\Messenger\Adapter\AmqpExt\AmqpSender;
|
||||||
use Symfony\Component\Messenger\ContainerHandlerLocator;
|
use Symfony\Component\Messenger\ContainerHandlerLocator;
|
||||||
use Symfony\Component\Messenger\DependencyInjection\MessengerPass;
|
use Symfony\Component\Messenger\DependencyInjection\MessengerPass;
|
||||||
use Symfony\Component\Messenger\Handler\ChainHandler;
|
use Symfony\Component\Messenger\Handler\ChainHandler;
|
||||||
@ -88,6 +90,26 @@ class MessengerPassTest extends TestCase
|
|||||||
$this->assertEquals(array(new Reference(PrioritizedHandler::class), new Reference(HandlerWithMultipleMessages::class)), $definition->getArgument(0));
|
$this->assertEquals(array(new Reference(PrioritizedHandler::class), new Reference(HandlerWithMultipleMessages::class)), $definition->getArgument(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testItRegistersReceivers()
|
||||||
|
{
|
||||||
|
$container = $this->getContainerBuilder();
|
||||||
|
$container->register(AmqpReceiver::class, AmqpReceiver::class)->addTag('messenger.receiver', array('name' => 'amqp'));
|
||||||
|
|
||||||
|
(new MessengerPass())->process($container);
|
||||||
|
|
||||||
|
$this->assertEquals(array('amqp' => new Reference(AmqpReceiver::class)), $container->getDefinition('messenger.receiver_locator')->getArgument(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testItRegistersSenders()
|
||||||
|
{
|
||||||
|
$container = $this->getContainerBuilder();
|
||||||
|
$container->register(AmqpSender::class, AmqpSender::class)->addTag('messenger.sender', array('name' => 'amqp'));
|
||||||
|
|
||||||
|
(new MessengerPass())->process($container);
|
||||||
|
|
||||||
|
$this->assertEquals(array('amqp' => new Reference(AmqpSender::class), AmqpSender::class => new Reference(AmqpSender::class)), $container->getDefinition('messenger.sender_locator')->getArgument(0));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
|
* @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
|
||||||
* @expectedExceptionMessage Invalid handler service "Symfony\Component\Messenger\Tests\DependencyInjection\UndefinedMessageHandler": message class "Symfony\Component\Messenger\Tests\DependencyInjection\UndefinedMessage" used as argument type in method "Symfony\Component\Messenger\Tests\DependencyInjection\UndefinedMessageHandler::__invoke()" does not exist.
|
* @expectedExceptionMessage Invalid handler service "Symfony\Component\Messenger\Tests\DependencyInjection\UndefinedMessageHandler": message class "Symfony\Component\Messenger\Tests\DependencyInjection\UndefinedMessage" used as argument type in method "Symfony\Component\Messenger\Tests\DependencyInjection\UndefinedMessageHandler::__invoke()" does not exist.
|
||||||
@ -199,6 +221,11 @@ class MessengerPassTest extends TestCase
|
|||||||
$container->setParameter('kernel.debug', true);
|
$container->setParameter('kernel.debug', true);
|
||||||
$container->register('message_bus', ContainerHandlerLocator::class);
|
$container->register('message_bus', ContainerHandlerLocator::class);
|
||||||
|
|
||||||
|
$container
|
||||||
|
->register('messenger.sender_locator', ServiceLocator::class)
|
||||||
|
->addArgument(new Reference('service_container'))
|
||||||
|
;
|
||||||
|
|
||||||
$container
|
$container
|
||||||
->register('messenger.handler_resolver', ContainerHandlerLocator::class)
|
->register('messenger.handler_resolver', ContainerHandlerLocator::class)
|
||||||
->addArgument(new Reference('service_container'))
|
->addArgument(new Reference('service_container'))
|
||||||
|
Reference in New Issue
Block a user