From 4552b7f5b253141ebc3e42378f5d56afb5cf8998 Mon Sep 17 00:00:00 2001 From: Tobias Schultze Date: Fri, 10 May 2019 07:52:04 +0200 Subject: [PATCH] [Messenger] remove send_and_handle option which can be achieved with SyncTransport --- .../Bundle/FrameworkBundle/CHANGELOG.md | 2 + .../DependencyInjection/Configuration.php | 3 -- .../FrameworkExtension.php | 3 -- .../Resources/config/messenger.xml | 1 - .../Resources/config/schema/symfony-1.0.xsd | 1 - .../Fixtures/php/messenger_routing.php | 1 - .../Fixtures/xml/messenger_routing.xml | 2 +- .../Fixtures/yml/messenger_routing.yml | 1 - .../FrameworkExtensionTest.php | 8 --- src/Symfony/Component/Messenger/CHANGELOG.md | 1 + .../Middleware/SendMessageMiddleware.php | 14 ++---- .../Middleware/SendMessageMiddlewareTest.php | 50 +++++-------------- .../Transport/Sender/SendersLocator.php | 16 +----- .../Sender/SendersLocatorInterface.php | 5 +- 14 files changed, 23 insertions(+), 85 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md index 132e964cc1cba..d32da9541ac5b 100644 --- a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md +++ b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md @@ -22,6 +22,8 @@ CHANGELOG `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. + * [BC Break] Removed the `framework.messenger.routing.send_and_handle` configuration. + Instead of setting it to true, configure a `SyncTransport` and route messages to it. * 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 43c24ddd2331d..44ed8213e916d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php @@ -1125,7 +1125,6 @@ private function addMessengerSection(ArrayNodeDefinition $rootNode) if (!\is_int($k)) { $newConfig[$k] = [ 'senders' => $v['senders'] ?? (\is_array($v) ? array_values($v) : [$v]), - 'send_and_handle' => $v['send_and_handle'] ?? false, ]; } else { $newConfig[$v['message-class']]['senders'] = array_map( @@ -1134,7 +1133,6 @@ function ($a) { }, array_values($v['sender']) ); - $newConfig[$v['message-class']]['send-and-handle'] = $v['send-and-handle'] ?? false; } } @@ -1147,7 +1145,6 @@ function ($a) { ->requiresAtLeastOneElement() ->prototype('scalar')->end() ->end() - ->booleanNode('send_and_handle')->defaultFalse()->end() ->end() ->end() ->end() diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index beac06980673b..e285aa9506ec8 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -1744,7 +1744,6 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder } $messageToSendersMapping = []; - $messagesToSendAndHandle = []; foreach ($config['routing'] as $message => $messageConfiguration) { if ('*' !== $message && !class_exists($message) && !interface_exists($message, false)) { throw new LogicException(sprintf('Invalid Messenger routing configuration: class or interface "%s" not found.', $message)); @@ -1758,7 +1757,6 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder } $messageToSendersMapping[$message] = $messageConfiguration['senders']; - $messagesToSendAndHandle[$message] = $messageConfiguration['send_and_handle']; } $senderReferences = []; @@ -1769,7 +1767,6 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder $container->getDefinition('messenger.senders_locator') ->replaceArgument(0, $messageToSendersMapping) ->replaceArgument(1, ServiceLocatorTagPass::register($container, $senderReferences)) - ->replaceArgument(2, $messagesToSendAndHandle) ; $container->getDefinition('messenger.retry_strategy_locator') diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml index 85a1a432615d8..ed1612e7e8554 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml @@ -11,7 +11,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 fcba6ef6ce362..04157511dc1a4 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 @@ -434,7 +434,6 @@ - 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 c8bddb1e8fcec..9badc0650597c 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 @@ -10,7 +10,6 @@ 'Symfony\Component\Messenger\Tests\Fixtures\DummyMessage' => ['amqp', 'audit'], 'Symfony\Component\Messenger\Tests\Fixtures\SecondMessage' => [ 'senders' => ['amqp', 'audit'], - 'send_and_handle' => true, ], '*' => 'amqp', ], 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 2b895cb6e6b86..43be6fc709d00 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 @@ -13,7 +13,7 @@ - + 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 84b6e2c0047ed..ae060529ffcc3 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 @@ -7,7 +7,6 @@ framework: 'Symfony\Component\Messenger\Tests\Fixtures\DummyMessage': [amqp, audit] 'Symfony\Component\Messenger\Tests\Fixtures\SecondMessage': senders: [amqp, audit] - send_and_handle: true '*': amqp transports: amqp: 'amqp://localhost/%2f/messages' diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php index f1dade56c6083..c9ead951fa44e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php @@ -40,7 +40,6 @@ use Symfony\Component\HttpClient\ScopingHttpClient; use Symfony\Component\HttpKernel\DependencyInjection\LoggerPass; use Symfony\Component\Messenger\Tests\Fixtures\DummyMessage; -use Symfony\Component\Messenger\Tests\Fixtures\SecondMessage; use Symfony\Component\Messenger\Transport\TransportFactory; use Symfony\Component\PropertyAccess\PropertyAccessor; use Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader; @@ -715,13 +714,6 @@ public function testMessengerRouting() $container = $this->createContainerFromFile('messenger_routing'); $senderLocatorDefinition = $container->getDefinition('messenger.senders_locator'); - $messageToSendAndHandleMapping = [ - DummyMessage::class => false, - SecondMessage::class => true, - '*' => false, - ]; - - $this->assertSame($messageToSendAndHandleMapping, $senderLocatorDefinition->getArgument(2)); $sendersMapping = $senderLocatorDefinition->getArgument(0); $this->assertEquals([ 'amqp', diff --git a/src/Symfony/Component/Messenger/CHANGELOG.md b/src/Symfony/Component/Messenger/CHANGELOG.md index e6aad77bf10b4..08a352032479a 100644 --- a/src/Symfony/Component/Messenger/CHANGELOG.md +++ b/src/Symfony/Component/Messenger/CHANGELOG.md @@ -6,6 +6,7 @@ CHANGELOG * [BC BREAK] `SendersLocatorInterface` has an additional method: `getSenderByAlias()`. + * Removed argument `?bool &$handle = false` from `SendersLocatorInterface::getSenders` * A new `ListableReceiverInterface` was added, which a receiver can implement (when applicable) to enable listing and fetching individual messages by id (used in the new "Failed Messages" commands). diff --git a/src/Symfony/Component/Messenger/Middleware/SendMessageMiddleware.php b/src/Symfony/Component/Messenger/Middleware/SendMessageMiddleware.php index 3e87a160673e4..e7dc0baa2a9da 100644 --- a/src/Symfony/Component/Messenger/Middleware/SendMessageMiddleware.php +++ b/src/Symfony/Component/Messenger/Middleware/SendMessageMiddleware.php @@ -52,7 +52,6 @@ public function handle(Envelope $envelope, StackInterface $stack): Envelope 'class' => \get_class($envelope->getMessage()), ]; - $handle = false; $sender = null; try { @@ -65,7 +64,7 @@ public function handle(Envelope $envelope, StackInterface $stack): Envelope // dispatch event unless this is a redelivery $shouldDispatchEvent = null === $redeliveryStamp; - foreach ($this->getSenders($envelope, $handle, $redeliveryStamp) as $alias => $sender) { + foreach ($this->getSenders($envelope, $redeliveryStamp) as $alias => $sender) { if (null !== $this->eventDispatcher && $shouldDispatchEvent) { $event = new SendMessageToTransportsEvent($envelope); $this->eventDispatcher->dispatch($event); @@ -76,14 +75,9 @@ public function handle(Envelope $envelope, StackInterface $stack): Envelope $this->logger->info('Sending message "{class}" with "{sender}"', $context + ['sender' => \get_class($sender)]); $envelope = $sender->send($envelope->with(new SentStamp(\get_class($sender), \is_string($alias) ? $alias : null))); } - - // on a redelivery, only send back to queue: never call local handlers - if (null !== $redeliveryStamp) { - $handle = false; - } } - if (null === $sender || $handle) { + if (null === $sender) { return $stack->next()->handle($envelope, $stack); } } catch (\Throwable $e) { @@ -100,7 +94,7 @@ public function handle(Envelope $envelope, StackInterface $stack): Envelope /** * * @return iterable|SenderInterface[] */ - private function getSenders(Envelope $envelope, &$handle, ?RedeliveryStamp $redeliveryStamp): iterable + private function getSenders(Envelope $envelope, ?RedeliveryStamp $redeliveryStamp): iterable { if (null !== $redeliveryStamp) { return [ @@ -108,6 +102,6 @@ private function getSenders(Envelope $envelope, &$handle, ?RedeliveryStamp $rede ]; } - return $this->sendersLocator->getSenders($envelope, $handle); + return $this->sendersLocator->getSenders($envelope); } } diff --git a/src/Symfony/Component/Messenger/Tests/Middleware/SendMessageMiddlewareTest.php b/src/Symfony/Component/Messenger/Tests/Middleware/SendMessageMiddlewareTest.php index 66eb53ca714c4..a7c569345f3bb 100644 --- a/src/Symfony/Component/Messenger/Tests/Middleware/SendMessageMiddlewareTest.php +++ b/src/Symfony/Component/Messenger/Tests/Middleware/SendMessageMiddlewareTest.php @@ -92,11 +92,7 @@ public function testItSendsToOnlyOneSenderOnRedelivery() $sendersLocator = $this->createSendersLocator( [DummyMessage::class => ['foo', 'bar']], - ['foo' => $sender, 'bar' => $sender2], - [ - // normally, this class sends and handles (but not on retry) - DummyMessage::class => true, - ] + ['foo' => $sender, 'bar' => $sender2] ); $middleware = new SendMessageMiddleware($sendersLocator); @@ -126,68 +122,46 @@ public function testItSendsTheMessageToAssignedSenderWithPreWrappedMessage() $middleware->handle($envelope, $this->getStackMock(false)); } - public function testItAlsoCallsTheNextMiddlewareBasedOnTheMessageClass() - { - $message = new DummyMessage('Hey'); - $envelope = new Envelope($message); - $sender = $this->getMockBuilder(SenderInterface::class)->getMock(); - - $sendersLocator = $this->createSendersLocator(['*' => ['foo_sender']], ['foo_sender' => $sender], [ - DummyMessage::class => true, - ]); - $middleware = new SendMessageMiddleware($sendersLocator); - - $sender->expects($this->once())->method('send')->with($envelope->with(new SentStamp(\get_class($sender), 'foo_sender')))->willReturn($envelope); - - $middleware->handle($envelope, $this->getStackMock()); - } - - public function testItAlsoCallsTheNextMiddlewareBasedOnTheMessageParentClass() + public function testItSendsTheMessageBasedOnTheMessageParentClass() { $message = new ChildDummyMessage('Hey'); $envelope = new Envelope($message); $sender = $this->getMockBuilder(SenderInterface::class)->getMock(); - $sendersLocator = $this->createSendersLocator(['*' => ['foo_sender']], ['foo_sender' => $sender], [ - DummyMessage::class => true, - ]); + $sendersLocator = $this->createSendersLocator([DummyMessage::class => ['foo_sender']], ['foo_sender' => $sender]); $middleware = new SendMessageMiddleware($sendersLocator); $sender->expects($this->once())->method('send')->with($envelope->with(new SentStamp(\get_class($sender), 'foo_sender')))->willReturn($envelope); - $middleware->handle($envelope, $this->getStackMock()); + $middleware->handle($envelope, $this->getStackMock(false)); } - public function testItAlsoCallsTheNextMiddlewareBasedOnTheMessageInterface() + public function testItSendsTheMessageBasedOnTheMessageInterface() { $message = new DummyMessage('Hey'); $envelope = new Envelope($message); $sender = $this->getMockBuilder(SenderInterface::class)->getMock(); - $sendersLocator = $this->createSendersLocator(['*' => ['foo_sender']], ['foo_sender' => $sender], [ - DummyMessageInterface::class => true, - ]); + $sendersLocator = $this->createSendersLocator([DummyMessageInterface::class => ['foo_sender']], ['foo_sender' => $sender]); $middleware = new SendMessageMiddleware($sendersLocator); $sender->expects($this->once())->method('send')->with($envelope->with(new SentStamp(\get_class($sender), 'foo_sender')))->willReturn($envelope); - $middleware->handle($envelope, $this->getStackMock()); + $middleware->handle($envelope, $this->getStackMock(false)); } - public function testItAlsoCallsTheNextMiddlewareBasedOnWildcard() + public function testItSendsTheMessageBasedOnWildcard() { $message = new DummyMessage('Hey'); $envelope = new Envelope($message); $sender = $this->getMockBuilder(SenderInterface::class)->getMock(); - $sendersLocator = $this->createSendersLocator(['*' => ['foo_sender']], ['foo_sender' => $sender], [ - '*' => true, - ]); + $sendersLocator = $this->createSendersLocator(['*' => ['foo_sender']], ['foo_sender' => $sender]); $middleware = new SendMessageMiddleware($sendersLocator); $sender->expects($this->once())->method('send')->with($envelope->with(new SentStamp(\get_class($sender), 'foo_sender')))->willReturn($envelope); - $middleware->handle($envelope, $this->getStackMock()); + $middleware->handle($envelope, $this->getStackMock(false)); } public function testItCallsTheNextMiddlewareWhenNoSenderForThisMessage() @@ -267,7 +241,7 @@ public function testItDoesNotDispatchOnRedeliver() $middleware->handle($envelope, $this->getStackMock(false)); } - private function createSendersLocator(array $sendersMap, array $senders, array $sendAndHandle = []) + private function createSendersLocator(array $sendersMap, array $senders) { $container = $this->createMock(ContainerInterface::class); $container->expects($this->any()) @@ -281,6 +255,6 @@ private function createSendersLocator(array $sendersMap, array $senders, array $ return $senders[$id]; }); - return new SendersLocator($sendersMap, $container, $sendAndHandle); + return new SendersLocator($sendersMap, $container); } } diff --git a/src/Symfony/Component/Messenger/Transport/Sender/SendersLocator.php b/src/Symfony/Component/Messenger/Transport/Sender/SendersLocator.php index 815dbbc3f8a05..2f7a1e971dca3 100644 --- a/src/Symfony/Component/Messenger/Transport/Sender/SendersLocator.php +++ b/src/Symfony/Component/Messenger/Transport/Sender/SendersLocator.php @@ -30,14 +30,12 @@ class SendersLocator implements SendersLocatorInterface private $sendersMap; private $sendersLocator; private $useLegacyLookup = false; - private $sendAndHandle; /** * @param string[][] $sendersMap An array, keyed by "type", set to an array of sender aliases * @param ContainerInterface $sendersLocator Locator of senders, keyed by sender alias - * @param bool[] $sendAndHandle */ - public function __construct(array $sendersMap, /*ContainerInterface*/ $sendersLocator = null, array $sendAndHandle = []) + public function __construct(array $sendersMap, /*ContainerInterface*/ $sendersLocator = null) { $this->sendersMap = $sendersMap; @@ -45,21 +43,17 @@ public function __construct(array $sendersMap, /*ContainerInterface*/ $sendersLo @trigger_error(sprintf('"%s::__construct()" requires a "%s" as 2nd argument. Not doing so is deprecated since Symfony 4.3 and will be required in 5.0.', __CLASS__, ContainerInterface::class), E_USER_DEPRECATED); // "%s" requires a "%s" as 2nd argument. Not doing so is deprecated since Symfony 4.3 and will be required in 5.0.' $this->sendersLocator = new ServiceLocator([]); - $this->sendAndHandle = $sendersLocator; $this->useLegacyLookup = true; } else { $this->sendersLocator = $sendersLocator; - $this->sendAndHandle = $sendAndHandle; } } /** * {@inheritdoc} */ - public function getSenders(Envelope $envelope, ?bool &$handle = false): iterable + public function getSenders(Envelope $envelope): iterable { - $handle = false; - $sender = null; $seen = []; foreach (HandlersLocator::listTypes($envelope) as $type) { @@ -71,8 +65,6 @@ public function getSenders(Envelope $envelope, ?bool &$handle = false): iterable } } - $handle = $handle ?: $this->sendAndHandle[$type] ?? false; - continue; } @@ -87,11 +79,7 @@ public function getSenders(Envelope $envelope, ?bool &$handle = false): iterable yield $senderAlias => $sender; } } - - $handle = $handle ?: $this->sendAndHandle[$type] ?? false; } - - $handle = $handle || null === $sender; } public function getSenderByAlias(string $alias): SenderInterface diff --git a/src/Symfony/Component/Messenger/Transport/Sender/SendersLocatorInterface.php b/src/Symfony/Component/Messenger/Transport/Sender/SendersLocatorInterface.php index 1bcb8715f55d1..bc9a87b17740f 100644 --- a/src/Symfony/Component/Messenger/Transport/Sender/SendersLocatorInterface.php +++ b/src/Symfony/Component/Messenger/Transport/Sender/SendersLocatorInterface.php @@ -27,12 +27,9 @@ interface SendersLocatorInterface /** * Gets the senders for the given message name. * - * @param bool|null &$handle True after calling the method when the next middleware - * should also get the message; false otherwise - * * @return iterable|SenderInterface[] Indexed by sender alias if available */ - public function getSenders(Envelope $envelope, ?bool &$handle = false): iterable; + public function getSenders(Envelope $envelope): iterable; /** * Returns a specific sender by its alias. pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy