Skip to content

Commit 27d81a3

Browse files
committed
Revert "Move commands-specifics to a compiler pass in FWB"
This reverts commit b5415ead46fe337823c0d94add50e792f2054cca.
1 parent 767bfae commit 27d81a3

File tree

3 files changed

+59
-56
lines changed

3 files changed

+59
-56
lines changed

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
}

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
}

Tests/Fixtures/DummyReceiver.php

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

0 commit comments

Comments
 (0)