Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 13fbf63

Browse files
committed
[Messenger] configure bus on transport
1 parent ba1ba97 commit 13fbf63

19 files changed

+96
-382
lines changed

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1168,10 +1168,6 @@ private function addMessengerSection(ArrayNodeDefinition $rootNode)
11681168
->{!class_exists(FullStack::class) && interface_exists(MessageBusInterface::class) ? 'canBeDisabled' : 'canBeEnabled'}()
11691169
->fixXmlConfig('transport')
11701170
->fixXmlConfig('bus', 'buses')
1171-
->validate()
1172-
->ifTrue(function ($v) { return isset($v['buses']) && \count($v['buses']) > 1 && null === $v['default_bus']; })
1173-
->thenInvalid('You must specify the "default_bus" if you define more than one bus.')
1174-
->end()
11751171
->children()
11761172
->arrayNode('routing')
11771173
->normalizeKeys(false)
@@ -1248,6 +1244,7 @@ function ($a) {
12481244
->children()
12491245
->scalarNode('dsn')->end()
12501246
->scalarNode('serializer')->defaultNull()->info('Service id of a custom serializer to use.')->end()
1247+
->scalarNode('bus')->defaultNull()->info('The bus name to dispatch received messages to. This only needs to be set if you have more than one bus.')->end()
12511248
->arrayNode('options')
12521249
->normalizeKeys(false)
12531250
->defaultValue([])

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1696,10 +1696,8 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
16961696

16971697
$defaultMiddleware = [
16981698
'before' => [
1699-
['id' => 'add_bus_name_stamp_middleware'],
17001699
['id' => 'reject_redelivered_message_middleware'],
17011700
['id' => 'dispatch_after_current_bus'],
1702-
['id' => 'failed_message_processing_middleware'],
17031701
],
17041702
'after' => [
17051703
['id' => 'send_message'],
@@ -1716,9 +1714,6 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
17161714
unset($defaultMiddleware['after'][1]['arguments']);
17171715
}
17181716

1719-
// argument to add_bus_name_stamp_middleware
1720-
$defaultMiddleware['before'][0]['arguments'] = [$busId];
1721-
17221717
$middleware = array_merge($defaultMiddleware['before'], $middleware, $defaultMiddleware['after']);
17231718
}
17241719

@@ -1763,7 +1758,7 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
17631758
$transportDefinition = (new Definition(TransportInterface::class))
17641759
->setFactory([new Reference('messenger.transport_factory'), 'createTransport'])
17651760
->setArguments([$transport['dsn'], $transport['options'] + ['transport_name' => $name], new Reference($serializerId)])
1766-
->addTag('messenger.receiver', ['alias' => $name])
1761+
->addTag('messenger.receiver', ['alias' => $name, 'bus' => $transport['bus']])
17671762
;
17681763
$container->setDefinition($transportId = 'messenger.transport.'.$name, $transportDefinition);
17691764
$senderAliases[$name] = $transportId;

src/Symfony/Bundle/FrameworkBundle/Resources/config/console.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@
8686
</service>
8787

8888
<service id="console.command.messenger_consume_messages" class="Symfony\Component\Messenger\Command\ConsumeMessagesCommand">
89-
<argument /> <!-- Routable message bus -->
89+
<argument type="service" id="messenger.routable_message_bus" />
9090
<argument type="service" id="messenger.receiver_locator" />
9191
<argument type="service" id="event_dispatcher" />
9292
<argument type="service" id="logger" on-invalid="null" />

src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@
4040
</call>
4141
</service>
4242

43-
<service id="messenger.middleware.add_bus_name_stamp_middleware" class="Symfony\Component\Messenger\Middleware\AddBusNameStampMiddleware" abstract="true" />
44-
4543
<service id="messenger.middleware.dispatch_after_current_bus" class="Symfony\Component\Messenger\Middleware\DispatchAfterCurrentBusMiddleware" />
4644

4745
<service id="messenger.middleware.validation" class="Symfony\Component\Messenger\Middleware\ValidationMiddleware">
@@ -50,8 +48,6 @@
5048

5149
<service id="messenger.middleware.reject_redelivered_message_middleware" class="Symfony\Component\Messenger\Middleware\RejectRedeliveredMessageMiddleware" />
5250

53-
<service id="messenger.middleware.failed_message_processing_middleware" class="Symfony\Component\Messenger\Middleware\FailedMessageProcessingMiddleware" />
54-
5551
<service id="messenger.middleware.traceable" class="Symfony\Component\Messenger\Middleware\TraceableMiddleware" abstract="true">
5652
<argument type="service" id="debug.stopwatch" />
5753
</service>
@@ -132,7 +128,6 @@
132128
<!-- routable message bus -->
133129
<service id="messenger.routable_message_bus" class="Symfony\Component\Messenger\RoutableMessageBus">
134130
<argument /> <!-- Message bus locator -->
135-
<argument type="service" id="messenger.default_bus" />
136131
</service>
137132
</services>
138133
</container>

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -250,27 +250,6 @@ public function provideValidLockConfigurationTests()
250250
yield [['enabled' => false, 'resource' => [['name' => 'foo', 'value' => 'flock'], ['name' => 'foo', 'value' => 'semaphore'], ['name' => 'bar', 'value' => 'semaphore']]], ['enabled' => false, 'resources' => ['foo' => ['flock', 'semaphore'], 'bar' => ['semaphore']]]];
251251
}
252252

253-
public function testItShowANiceMessageIfTwoMessengerBusesAreConfiguredButNoDefaultBus()
254-
{
255-
$expectedMessage = 'You must specify the "default_bus" if you define more than one bus.';
256-
$this->expectException(InvalidConfigurationException::class);
257-
$this->expectExceptionMessage($expectedMessage);
258-
$processor = new Processor();
259-
$configuration = new Configuration(true);
260-
261-
$processor->processConfiguration($configuration, [
262-
'framework' => [
263-
'messenger' => [
264-
'default_bus' => null,
265-
'buses' => [
266-
'first_bus' => [],
267-
'second_bus' => [],
268-
],
269-
],
270-
],
271-
]);
272-
}
273-
274253
protected static function getBundleDefaultConfig()
275254
{
276255
return [

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -737,20 +737,16 @@ public function testMessengerWithMultipleBuses()
737737
$this->assertTrue($container->has('messenger.bus.commands'));
738738
$this->assertSame([], $container->getDefinition('messenger.bus.commands')->getArgument(0));
739739
$this->assertEquals([
740-
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.commands']],
741740
['id' => 'reject_redelivered_message_middleware'],
742741
['id' => 'dispatch_after_current_bus'],
743-
['id' => 'failed_message_processing_middleware'],
744742
['id' => 'send_message'],
745743
['id' => 'handle_message'],
746744
], $container->getParameter('messenger.bus.commands.middleware'));
747745
$this->assertTrue($container->has('messenger.bus.events'));
748746
$this->assertSame([], $container->getDefinition('messenger.bus.events')->getArgument(0));
749747
$this->assertEquals([
750-
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.events']],
751748
['id' => 'reject_redelivered_message_middleware'],
752749
['id' => 'dispatch_after_current_bus'],
753-
['id' => 'failed_message_processing_middleware'],
754750
['id' => 'with_factory', 'arguments' => ['foo', true, ['bar' => 'baz']]],
755751
['id' => 'send_message'],
756752
['id' => 'handle_message'],

src/Symfony/Component/Messenger/Command/ConsumeMessagesCommand.php

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -42,18 +42,8 @@ class ConsumeMessagesCommand extends Command
4242
private $receiverNames;
4343
private $eventDispatcher;
4444

45-
/**
46-
* @param RoutableMessageBus $routableBus
47-
*/
48-
public function __construct($routableBus, ContainerInterface $receiverLocator, EventDispatcherInterface $eventDispatcher, LoggerInterface $logger = null, array $receiverNames = [])
45+
public function __construct(RoutableMessageBus $routableBus, ContainerInterface $receiverLocator, EventDispatcherInterface $eventDispatcher, LoggerInterface $logger = null, array $receiverNames = [])
4946
{
50-
if ($routableBus instanceof ContainerInterface) {
51-
@trigger_error(sprintf('Passing a "%s" instance as first argument to "%s()" is deprecated since Symfony 4.4, pass a "%s" instance instead.', ContainerInterface::class, __METHOD__, RoutableMessageBus::class), E_USER_DEPRECATED);
52-
$routableBus = new RoutableMessageBus($routableBus);
53-
} elseif (!$routableBus instanceof RoutableMessageBus) {
54-
throw new \TypeError(sprintf('The first argument must be an instance of "%s".', RoutableMessageBus::class));
55-
}
56-
5747
$this->routableBus = $routableBus;
5848
$this->receiverLocator = $receiverLocator;
5949
$this->logger = $logger;
@@ -77,7 +67,6 @@ protected function configure(): void
7767
new InputOption('memory-limit', 'm', InputOption::VALUE_REQUIRED, 'The memory limit the worker can consume'),
7868
new InputOption('time-limit', 't', InputOption::VALUE_REQUIRED, 'The time limit in seconds the worker can run'),
7969
new InputOption('sleep', null, InputOption::VALUE_REQUIRED, 'Seconds to sleep before asking for new messages after no messages were found', 1),
80-
new InputOption('bus', 'b', InputOption::VALUE_REQUIRED, 'Name of the bus to which received messages should be dispatched (if not passed, bus is determined automatically)'),
8170
])
8271
->setDescription('Consumes messages')
8372
->setHelp(<<<'EOF'
@@ -100,12 +89,6 @@ protected function configure(): void
10089
Use the --time-limit option to stop the worker when the given time limit (in seconds) is reached:
10190
10291
<info>php %command.full_name% <receiver-name> --time-limit=3600</info>
103-
104-
Use the --bus option to specify the message bus to dispatch received messages
105-
to instead of trying to determine it automatically. This is required if the
106-
messages didn't originate from Messenger:
107-
108-
<info>php %command.full_name% <receiver-name> --bus=event_bus</info>
10992
EOF
11093
)
11194
;
@@ -195,9 +178,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
195178
$io->comment('Re-run the command with a -vv option to see logs about consumed messages.');
196179
}
197180

198-
$bus = $input->getOption('bus') ? $this->routableBus->getMessageBus($input->getOption('bus')) : $this->routableBus;
199-
200-
$worker = new Worker($receivers, $bus, $this->eventDispatcher, $this->logger);
181+
$worker = new Worker($receivers, $this->routableBus, $this->eventDispatcher, $this->logger);
201182
$worker->run([
202183
'sleep' => $input->getOption('sleep') * 1000000,
203184
]);

src/Symfony/Component/Messenger/Command/FailedMessagesRetryCommand.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
use Symfony\Component\Messenger\Event\WorkerMessageReceivedEvent;
2424
use Symfony\Component\Messenger\EventListener\StopWorkerOnMessageLimitListener;
2525
use Symfony\Component\Messenger\Exception\LogicException;
26-
use Symfony\Component\Messenger\MessageBusInterface;
26+
use Symfony\Component\Messenger\RoutableMessageBus;
2727
use Symfony\Component\Messenger\Transport\Receiver\ListableReceiverInterface;
2828
use Symfony\Component\Messenger\Transport\Receiver\ReceiverInterface;
2929
use Symfony\Component\Messenger\Transport\Receiver\SingleMessageReceiver;
@@ -40,7 +40,7 @@ class FailedMessagesRetryCommand extends AbstractFailedMessagesCommand
4040
private $messageBus;
4141
private $logger;
4242

43-
public function __construct(string $receiverName, ReceiverInterface $receiver, MessageBusInterface $messageBus, EventDispatcherInterface $eventDispatcher, LoggerInterface $logger = null)
43+
public function __construct(string $receiverName, ReceiverInterface $receiver, RoutableMessageBus $messageBus, EventDispatcherInterface $eventDispatcher, LoggerInterface $logger = null)
4444
{
4545
$this->eventDispatcher = $eventDispatcher;
4646
$this->messageBus = $messageBus;

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

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@ private function guessHandledClasses(\ReflectionClass $handlerClass, string $ser
238238
private function registerReceivers(ContainerBuilder $container, array $busIds)
239239
{
240240
$receiverMapping = [];
241+
$receiverToBusMapping = [];
241242

242243
foreach ($container->findTaggedServiceIds($this->receiverTag) as $id => $tags) {
243244
$receiverClass = $container->findDefinition($id)->getClass();
@@ -247,9 +248,31 @@ private function registerReceivers(ContainerBuilder $container, array $busIds)
247248

248249
$receiverMapping[$id] = new Reference($id);
249250

251+
$namesForReceiver = [$id];
252+
$busIdForReceiver = null;
250253
foreach ($tags as $tag) {
251254
if (isset($tag['alias'])) {
252255
$receiverMapping[$tag['alias']] = $receiverMapping[$id];
256+
$namesForReceiver[] = $tag['alias'];
257+
}
258+
if (isset($tag['bus'])) {
259+
$busIdForReceiver = $tag['bus'];
260+
}
261+
}
262+
263+
if (count($busIds) > 1 && null === $busIdForReceiver) {
264+
throw new RuntimeException(sprintf('Invalid receiver "%s": As you have more than one bus, you need to set the "bus" option on the transport configuration or use such a tag attribute on the service definition.', $id));
265+
}
266+
if (null !== $busIdForReceiver && !\in_array($busIdForReceiver, $busIds, true)) {
267+
throw new RuntimeException(sprintf('Invalid receiver "%s": Configured bus "%s" does not exist (known ones are: %s).', $id, $busIdForReceiver, implode(', ', $busIds)));
268+
}
269+
if (count($busIds) === 1 && null === $busIdForReceiver) {
270+
$busIdForReceiver = $busIds[0];
271+
}
272+
if (null !== $busIdForReceiver) {
273+
$busRef = new Reference($busIdForReceiver);
274+
foreach ($namesForReceiver as $receiverName) {
275+
$receiverToBusMapping[$receiverName] = $busRef;
253276
}
254277
}
255278
}
@@ -259,24 +282,14 @@ private function registerReceivers(ContainerBuilder $container, array $busIds)
259282
$receiverNames[(string) $reference] = $name;
260283
}
261284

262-
$buses = [];
263-
foreach ($busIds as $busId) {
264-
$buses[$busId] = new Reference($busId);
265-
}
266-
267-
if ($hasRoutableMessageBus = $container->hasDefinition('messenger.routable_message_bus')) {
285+
if ($container->hasDefinition('messenger.routable_message_bus')) {
268286
$container->getDefinition('messenger.routable_message_bus')
269-
->replaceArgument(0, ServiceLocatorTagPass::register($container, $buses));
287+
->replaceArgument(0, ServiceLocatorTagPass::register($container, $receiverToBusMapping));
270288
}
271289

272290
if ($container->hasDefinition('console.command.messenger_consume_messages')) {
273-
$consumeCommandDefinition = $container->getDefinition('console.command.messenger_consume_messages');
274-
275-
if ($hasRoutableMessageBus) {
276-
$consumeCommandDefinition->replaceArgument(0, new Reference('messenger.routable_message_bus'));
277-
}
278-
279-
$consumeCommandDefinition->replaceArgument(4, array_values($receiverNames));
291+
$container->getDefinition('console.command.messenger_consume_messages')
292+
->replaceArgument(4, array_values($receiverNames));
280293
}
281294

282295
if ($container->hasDefinition('console.command.messenger_setup_transports')) {

src/Symfony/Component/Messenger/Middleware/AddBusNameStampMiddleware.php

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

src/Symfony/Component/Messenger/Middleware/FailedMessageProcessingMiddleware.php

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

0 commit comments

Comments
 (0)