Skip to content

Commit fb3f729

Browse files
committed
Revert "Move commands-specifics to a compiler pass in FWB"
This reverts commit b5415ea.
1 parent bc90da7 commit fb3f729

File tree

7 files changed

+59
-156
lines changed

7 files changed

+59
-156
lines changed

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/MessengerCommandsPass.php

Lines changed: 0 additions & 53 deletions
This file was deleted.

src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\ContainerBuilderDebugDumpPass;
2222
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\DataCollectorTranslatorPass;
2323
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\LoggingTranslatorPass;
24-
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\MessengerCommandsPass;
2524
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\ProfilerPass;
2625
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\TemplatingPass;
2726
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\TestServiceContainerRealRefPass;
@@ -120,7 +119,6 @@ public function build(ContainerBuilder $container)
120119
$container->addCompilerPass(new TestServiceContainerWeakRefPass(), PassConfig::TYPE_BEFORE_REMOVING, -32);
121120
$container->addCompilerPass(new TestServiceContainerRealRefPass(), PassConfig::TYPE_AFTER_REMOVING);
122121
$this->addCompilerPassIfExists($container, MessengerPass::class);
123-
$container->addCompilerPass(new MessengerCommandsPass());
124122

125123
if ($container->getParameter('kernel.debug')) {
126124
$container->addCompilerPass(new AddDebugLogProcessorPass(), PassConfig::TYPE_BEFORE_OPTIMIZATION, -32);

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/MessengerCommandsPassTest.php

Lines changed: 0 additions & 44 deletions
This file was deleted.

src/Symfony/Bundle/FrameworkBundle/composer.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@
6767
"symfony/asset": "<3.4",
6868
"symfony/console": "<3.4",
6969
"symfony/form": "<4.1",
70-
"symfony/messenger": "<4.1.5",
7170
"symfony/property-info": "<3.4",
7271
"symfony/serializer": "<4.1",
7372
"symfony/stopwatch": "<3.4",

src/Symfony/Component/Messenger/DependencyInjection/MessengerPass.php

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,30 @@ private function guessHandledClasses(\ReflectionClass $handlerClass, string $ser
220220

221221
private function registerReceivers(ContainerBuilder $container)
222222
{
223-
$receiverMapping = self::findReceivers($container, $this->receiverTag);
223+
$receiverMapping = array();
224+
225+
foreach ($container->findTaggedServiceIds($this->receiverTag) as $id => $tags) {
226+
$receiverClass = $container->findDefinition($id)->getClass();
227+
if (!is_subclass_of($receiverClass, ReceiverInterface::class)) {
228+
throw new RuntimeException(sprintf('Invalid receiver "%s": class "%s" must implement interface "%s".', $id, $receiverClass, ReceiverInterface::class));
229+
}
230+
231+
$receiverMapping[$id] = new Reference($id);
232+
233+
foreach ($tags as $tag) {
234+
if (isset($tag['alias'])) {
235+
$receiverMapping[$tag['alias']] = $receiverMapping[$id];
236+
}
237+
}
238+
}
239+
240+
if ($container->hasDefinition('console.command.messenger_consume_messages')) {
241+
$receiverNames = array();
242+
foreach ($receiverMapping as $name => $reference) {
243+
$receiverNames[(string) $reference] = $name;
244+
}
245+
$container->getDefinition('console.command.messenger_consume_messages')->replaceArgument(3, array_values($receiverNames));
246+
}
224247

225248
$container->getDefinition('messenger.receiver_locator')->replaceArgument(0, $receiverMapping);
226249
}
@@ -289,29 +312,4 @@ private function registerBusMiddleware(ContainerBuilder $container, string $busI
289312

290313
$container->getDefinition($busId)->replaceArgument(0, $middlewareReferences);
291314
}
292-
293-
/**
294-
* @internal
295-
*/
296-
public static function findReceivers(ContainerBuilder $container, string $receiverTag)
297-
{
298-
$receiverMapping = array();
299-
300-
foreach ($container->findTaggedServiceIds($receiverTag) as $id => $tags) {
301-
$receiverClass = $container->findDefinition($id)->getClass();
302-
if (!is_subclass_of($receiverClass, ReceiverInterface::class)) {
303-
throw new RuntimeException(sprintf('Invalid receiver "%s": class "%s" must implement interface "%s".', $id, $receiverClass, ReceiverInterface::class));
304-
}
305-
306-
$receiverMapping[$id] = new Reference($id);
307-
308-
foreach ($tags as $tag) {
309-
if (isset($tag['alias'])) {
310-
$receiverMapping[$tag['alias']] = $receiverMapping[$id];
311-
}
312-
}
313-
}
314-
315-
return $receiverMapping;
316-
}
317315
}

src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@
1818
use Symfony\Component\DependencyInjection\ContainerBuilder;
1919
use Symfony\Component\DependencyInjection\Reference;
2020
use Symfony\Component\DependencyInjection\ServiceLocator;
21+
use Symfony\Component\Messenger\Command\ConsumeMessagesCommand;
2122
use Symfony\Component\Messenger\Command\DebugCommand;
2223
use Symfony\Component\Messenger\DataCollector\MessengerDataCollector;
2324
use Symfony\Component\Messenger\DependencyInjection\MessengerPass;
25+
use Symfony\Component\Messenger\Envelope;
2426
use Symfony\Component\Messenger\Handler\ChainHandler;
2527
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
2628
use Symfony\Component\Messenger\Handler\MessageSubscriberInterface;
@@ -33,12 +35,12 @@
3335
use Symfony\Component\Messenger\Tests\Fixtures\DummyMessage;
3436
use Symfony\Component\Messenger\Tests\Fixtures\DummyQuery;
3537
use Symfony\Component\Messenger\Tests\Fixtures\DummyQueryHandler;
36-
use Symfony\Component\Messenger\Tests\Fixtures\DummyReceiver;
3738
use Symfony\Component\Messenger\Tests\Fixtures\MultipleBusesMessage;
3839
use Symfony\Component\Messenger\Tests\Fixtures\MultipleBusesMessageHandler;
3940
use Symfony\Component\Messenger\Tests\Fixtures\SecondMessage;
4041
use Symfony\Component\Messenger\Transport\AmqpExt\AmqpReceiver;
4142
use Symfony\Component\Messenger\Transport\AmqpExt\AmqpSender;
43+
use Symfony\Component\Messenger\Transport\ReceiverInterface;
4244

4345
class MessengerPassTest extends TestCase
4446
{
@@ -235,6 +237,24 @@ public function testItRegistersReceiversWithoutTagName()
235237
$this->assertEquals(array(AmqpReceiver::class => new Reference(AmqpReceiver::class)), $container->getDefinition('messenger.receiver_locator')->getArgument(0));
236238
}
237239

240+
public function testItRegistersMultipleReceiversAndSetsTheReceiverNamesOnTheCommand()
241+
{
242+
$container = $this->getContainerBuilder();
243+
$container->register('console.command.messenger_consume_messages', ConsumeMessagesCommand::class)->setArguments(array(
244+
new Reference('message_bus'),
245+
new Reference('messenger.receiver_locator'),
246+
null,
247+
null,
248+
));
249+
250+
$container->register(AmqpReceiver::class, AmqpReceiver::class)->addTag('messenger.receiver', array('alias' => 'amqp'));
251+
$container->register(DummyReceiver::class, DummyReceiver::class)->addTag('messenger.receiver', array('alias' => 'dummy'));
252+
253+
(new MessengerPass())->process($container);
254+
255+
$this->assertSame(array('amqp', 'dummy'), $container->getDefinition('console.command.messenger_consume_messages')->getArgument(3));
256+
}
257+
238258
public function testItRegistersSenders()
239259
{
240260
$container = $this->getContainerBuilder();
@@ -567,6 +587,20 @@ public function __invoke(DummyMessage $message): void
567587
}
568588
}
569589

590+
class DummyReceiver implements ReceiverInterface
591+
{
592+
public function receive(callable $handler): void
593+
{
594+
for ($i = 0; $i < 3; ++$i) {
595+
$handler(Envelope::wrap(new DummyMessage("Dummy $i")));
596+
}
597+
}
598+
599+
public function stop(): void
600+
{
601+
}
602+
}
603+
570604
class InvalidReceiver
571605
{
572606
}

src/Symfony/Component/Messenger/Tests/Fixtures/DummyReceiver.php

Lines changed: 0 additions & 29 deletions
This file was deleted.

0 commit comments

Comments
 (0)