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

Skip to content

Commit 083af0a

Browse files
committed
[Messenger] configure bus on transport
1 parent ba1ba97 commit 083af0a

22 files changed

+147
-394
lines changed

UPGRADE-4.4.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,11 @@ FrameworkBundle
9696
* Not tagging service route loaders with `routing.route_loader` has been deprecated.
9797
* Overriding the methods `KernelTestCase::tearDown()` and `WebTestCase::tearDown()` without the `void` return-type is deprecated.
9898
* Marked the `RouterDataCollector` class as `@final`.
99+
* [BC BREAK] If you defined more than one bus, you must set the "bus" config option on the transport.
100+
Messages received from this transport will be dispatched to this bus automatically. This replaces the
101+
`--bus` option of `messenger:consume` command and the `BusNameStamp`.
102+
* [BC Break] Removed `messenger.middleware.add_bus_name_stamp_middleware` service
103+
* [BC Break] Removed `messenger.middleware.failed_message_processing_middleware` service
99104

100105
HttpClient
101106
----------
@@ -179,6 +184,11 @@ Messenger
179184
* [BC BREAK] Removed `StopWhenMessageCountIsExceededWorker` in favor of `StopWorkerOnMessageLimitListener`.
180185
* [BC BREAK] Removed `StopWhenTimeLimitIsReachedWorker` in favor of `StopWorkerOnTimeLimitListener`.
181186
* [BC BREAK] Removed `StopWhenRestartSignalIsReceived` in favor of `StopWorkerOnRestartSignalListener`.
187+
* [BC BREAK] Removed `BusNameStamp`.
188+
* [BC BREAK] Removed `AddBusNameStampMiddleware`.
189+
* [BC BREAK] Removed `FailedMessageProcessingMiddleware`.
190+
* [BC BREAK] Removed `--bus` option of `messenger:consume` command in favor of the "bus" config on the transport.
191+
* [BC BREAK] Removed `$fallbackBus` argument from `RoutableMessageBus::__construct`.
182192
* Marked the `MessengerDataCollector` class as `@final`.
183193

184194
Mime

src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,13 @@ CHANGELOG
1717
* Overriding the methods `KernelTestCase::tearDown()` and `WebTestCase::tearDown()` without the `void` return-type is deprecated.
1818
* Added new `error_controller` configuration to handle system exceptions
1919
* Added sort option for `translation:update` command.
20+
* The `messenger.default_bus` config option is optional now even when having more than one bus to prevent unwanted autowiring.
21+
* [BC BREAK] If you defined more than one bus, you must set the "bus" config option on the transport.
22+
Messages received from this transport will be dispatched to this bus automatically. This replaces the
23+
`--bus` option of `messenger:consume` command and the `BusNameStamp`.
2024
* [BC Break] The `framework.messenger.routing.senders` config key is not deep merged anymore.
25+
* [BC Break] Removed `messenger.middleware.add_bus_name_stamp_middleware` service
26+
* [BC Break] Removed `messenger.middleware.failed_message_processing_middleware` service
2127
* Added `secrets:*` commands and `%env(secret:...)%` processor to deal with secrets seamlessly.
2228
* Made `framework.session.handler_id` accept a DSN
2329
* Marked the `RouterDataCollector` class as `@final`.

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

Lines changed: 12 additions & 6 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)
@@ -1247,7 +1243,14 @@ function ($a) {
12471243
->fixXmlConfig('option')
12481244
->children()
12491245
->scalarNode('dsn')->end()
1250-
->scalarNode('serializer')->defaultNull()->info('Service id of a custom serializer to use.')->end()
1246+
->scalarNode('serializer')
1247+
->defaultNull()
1248+
->info('Service id of a custom serializer to use.')
1249+
->end()
1250+
->scalarNode('bus')
1251+
->defaultNull()
1252+
->info('Bus name to dispatch received messages to. This only needs to be set if you have more than one bus.')
1253+
->end()
12511254
->arrayNode('options')
12521255
->normalizeKeys(false)
12531256
->defaultValue([])
@@ -1280,7 +1283,10 @@ function ($a) {
12801283
->defaultNull()
12811284
->info('Transport name to send failed messages to (after all retries have failed).')
12821285
->end()
1283-
->scalarNode('default_bus')->defaultNull()->end()
1286+
->scalarNode('default_bus')
1287+
->defaultNull()
1288+
->info('Bus name that will be used for autowiring MessageBusInterface. When there is only a single bus this happens automatically. With multiple buses you can set this option or use named autowiring based on the bus name or explicit wiring.')
1289+
->end()
12841290
->arrayNode('buses')
12851291
->defaultValue(['messenger.bus.default' => ['default_middleware' => true, 'middleware' => []]])
12861292
->normalizeKeys(false)

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

Lines changed: 2 additions & 12 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;
@@ -1829,14 +1824,9 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
18291824
throw new LogicException(sprintf('Invalid Messenger configuration: the failure transport "%s" is not a valid transport or service id.', $config['failure_transport']));
18301825
}
18311826

1827+
$container->setParameter('messenger.failure_transport', $config['failure_transport']);
18321828
$container->getDefinition('messenger.failure.send_failed_message_to_failure_transport_listener')
18331829
->replaceArgument(0, $senderReferences[$config['failure_transport']]);
1834-
$container->getDefinition('console.command.messenger_failed_messages_retry')
1835-
->replaceArgument(0, $config['failure_transport']);
1836-
$container->getDefinition('console.command.messenger_failed_messages_show')
1837-
->replaceArgument(0, $config['failure_transport']);
1838-
$container->getDefinition('console.command.messenger_failed_messages_remove')
1839-
->replaceArgument(0, $config['failure_transport']);
18401830
} else {
18411831
$container->removeDefinition('messenger.failure.send_failed_message_to_failure_transport_listener');
18421832
$container->removeDefinition('console.command.messenger_failed_messages_retry');

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

Lines changed: 4 additions & 4 deletions
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" />
@@ -115,7 +115,7 @@
115115
</service>
116116

117117
<service id="console.command.messenger_failed_messages_retry" class="Symfony\Component\Messenger\Command\FailedMessagesRetryCommand">
118-
<argument /> <!-- Receiver name -->
118+
<argument>%messenger.failure_transport%</argument>
119119
<argument /> <!-- Receiver -->
120120
<argument type="service" id="messenger.routable_message_bus" />
121121
<argument type="service" id="event_dispatcher" />
@@ -125,14 +125,14 @@
125125
</service>
126126

127127
<service id="console.command.messenger_failed_messages_show" class="Symfony\Component\Messenger\Command\FailedMessagesShowCommand">
128-
<argument /> <!-- Receiver name -->
128+
<argument>%messenger.failure_transport%</argument>
129129
<argument /> <!-- Receiver -->
130130

131131
<tag name="console.command" command="messenger:failed:show" />
132132
</service>
133133

134134
<service id="console.command.messenger_failed_messages_remove" class="Symfony\Component\Messenger\Command\FailedMessagesRemoveCommand">
135-
<argument /> <!-- Receiver name -->
135+
<argument>%messenger.failure_transport%</argument>
136136
<argument /> <!-- Receiver -->
137137

138138
<tag name="console.command" command="messenger:failed:remove" />

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/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ CHANGELOG
2121
* [BC BREAK] Removed `StopWhenMessageCountIsExceededWorker` in favor of `StopWorkerOnMessageLimitListener`.
2222
* [BC BREAK] Removed `StopWhenTimeLimitIsReachedWorker` in favor of `StopWorkerOnTimeLimitListener`.
2323
* [BC BREAK] Removed `StopWhenRestartSignalIsReceived` in favor of `StopWorkerOnRestartSignalListener`.
24+
* [BC BREAK] Removed `BusNameStamp`.
25+
* [BC BREAK] Removed `AddBusNameStampMiddleware`.
26+
* [BC BREAK] Removed `FailedMessageProcessingMiddleware`.
27+
* [BC BREAK] Removed `--bus` option of `messenger:consume` command in favor of the "bus" config on the transport.
28+
* [BC BREAK] Removed `$fallbackBus` argument from `RoutableMessageBus::__construct`.
2429
* The component is not marked as `@experimental` anymore.
2530
* Marked the `MessengerDataCollector` class as `@final`.
2631
* Added support for `DelayStamp` to the `redis` transport.

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;

0 commit comments

Comments
 (0)