Skip to content

Commit 889f88f

Browse files
committed
the DeduplicateMiddleware requires the lock feature to be enabled
If the `lock` feature is not enabled, no `lock.factory` service will be registered.
1 parent 4bd05f1 commit 889f88f

8 files changed

+136
-48
lines changed

DependencyInjection/FrameworkExtension.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -538,7 +538,7 @@ public function load(array $configs, ContainerBuilder $container): void
538538

539539
// messenger depends on validation being registered
540540
if ($messengerEnabled) {
541-
$this->registerMessengerConfiguration($config['messenger'], $container, $loader, $this->readConfigEnabled('validation', $container, $config['validation']));
541+
$this->registerMessengerConfiguration($config['messenger'], $container, $loader, $this->readConfigEnabled('validation', $container, $config['validation']), $this->readConfigEnabled('lock', $container, $config['lock']));
542542
} else {
543543
$container->removeDefinition('console.command.messenger_consume_messages');
544544
$container->removeDefinition('console.command.messenger_stats');
@@ -2228,7 +2228,7 @@ private function registerSchedulerConfiguration(ContainerBuilder $container, Php
22282228
}
22292229
}
22302230

2231-
private function registerMessengerConfiguration(array $config, ContainerBuilder $container, PhpFileLoader $loader, bool $validationEnabled): void
2231+
private function registerMessengerConfiguration(array $config, ContainerBuilder $container, PhpFileLoader $loader, bool $validationEnabled, bool $lockEnabled): void
22322232
{
22332233
if (!interface_exists(MessageBusInterface::class)) {
22342234
throw new LogicException('Messenger support cannot be enabled as the Messenger component is not installed. Try running "composer require symfony/messenger".');
@@ -2284,7 +2284,7 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
22842284
],
22852285
];
22862286

2287-
if (class_exists(DeduplicateMiddleware::class) && class_exists(LockFactory::class)) {
2287+
if ($lockEnabled && class_exists(DeduplicateMiddleware::class) && class_exists(LockFactory::class)) {
22882288
$defaultMiddleware['before'][] = ['id' => 'deduplicate_middleware'];
22892289
} else {
22902290
$container->removeDefinition('messenger.middleware.deduplicate_middleware');
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
$container->loadFromExtension('framework', [
4+
'annotations' => false,
5+
'http_method_override' => false,
6+
'handle_all_throwables' => true,
7+
'php_errors' => ['log' => true],
8+
'lock' => null,
9+
'messenger' => [
10+
'default_bus' => 'messenger.bus.commands',
11+
'buses' => [
12+
'messenger.bus.commands' => null,
13+
'messenger.bus.events' => [
14+
'middleware' => [
15+
['with_factory' => ['foo', true, ['bar' => 'baz']]],
16+
],
17+
],
18+
'messenger.bus.queries' => [
19+
'default_middleware' => false,
20+
'middleware' => [
21+
'send_message',
22+
'handle_message',
23+
],
24+
],
25+
],
26+
],
27+
]);
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<container xmlns="http://symfony.com/schema/dic/services"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xmlns:framework="http://symfony.com/schema/dic/symfony"
5+
xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd
6+
http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
7+
8+
<framework:config http-method-override="false" handle-all-throwables="true">
9+
<framework:annotations enabled="false" />
10+
<framework:php-errors log="true" />
11+
<framework:lock />
12+
<framework:messenger default-bus="messenger.bus.commands">
13+
<framework:bus name="messenger.bus.commands" />
14+
<framework:bus name="messenger.bus.events">
15+
<framework:middleware id="with_factory">
16+
<framework:argument>foo</framework:argument>
17+
<framework:argument>true</framework:argument>
18+
<framework:argument>
19+
<framework:bar>baz</framework:bar>
20+
</framework:argument>
21+
</framework:middleware>
22+
</framework:bus>
23+
<framework:bus name="messenger.bus.queries" default-middleware="false">
24+
<framework:middleware id="send_message" />
25+
<framework:middleware id="handle_message" />
26+
</framework:bus>
27+
</framework:messenger>
28+
</framework:config>
29+
</container>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
framework:
2+
annotations: false
3+
http_method_override: false
4+
handle_all_throwables: true
5+
php_errors:
6+
log: true
7+
lock: ~
8+
messenger:
9+
default_bus: messenger.bus.commands
10+
buses:
11+
messenger.bus.commands: ~
12+
messenger.bus.events:
13+
middleware:
14+
- with_factory: [foo, true, { bar: baz }]
15+
messenger.bus.queries:
16+
default_middleware: false
17+
middleware:
18+
- "send_message"
19+
- "handle_message"

Tests/DependencyInjection/FrameworkExtensionTestCase.php

Lines changed: 58 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1056,60 +1056,73 @@ public function testMessengerTransportConfiguration()
10561056
$this->assertSame(['enable_max_depth' => true], $serializerTransportDefinition->getArgument(2));
10571057
}
10581058

1059-
public function testMessengerWithMultipleBuses()
1059+
public function testMessengerWithMultipleBusesWithoutDeduplicateMiddleware()
10601060
{
1061-
$container = $this->createContainerFromFile('messenger_multiple_buses');
1061+
$container = $this->createContainerFromFile('messenger_multiple_buses_without_deduplicate_middleware');
10621062

10631063
$this->assertTrue($container->has('messenger.bus.commands'));
10641064
$this->assertSame([], $container->getDefinition('messenger.bus.commands')->getArgument(0));
1065-
1066-
if (class_exists(DeduplicateMiddleware::class)) {
1067-
$this->assertEquals([
1068-
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.commands']],
1069-
['id' => 'reject_redelivered_message_middleware'],
1070-
['id' => 'dispatch_after_current_bus'],
1071-
['id' => 'failed_message_processing_middleware'],
1072-
['id' => 'deduplicate_middleware'],
1073-
['id' => 'send_message', 'arguments' => [true]],
1074-
['id' => 'handle_message', 'arguments' => [false]],
1075-
], $container->getParameter('messenger.bus.commands.middleware'));
1076-
} else {
1077-
$this->assertEquals([
1078-
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.commands']],
1079-
['id' => 'reject_redelivered_message_middleware'],
1080-
['id' => 'dispatch_after_current_bus'],
1081-
['id' => 'failed_message_processing_middleware'],
1082-
['id' => 'send_message', 'arguments' => [true]],
1083-
['id' => 'handle_message', 'arguments' => [false]],
1084-
], $container->getParameter('messenger.bus.commands.middleware'));
1085-
}
1086-
1065+
$this->assertEquals([
1066+
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.commands']],
1067+
['id' => 'reject_redelivered_message_middleware'],
1068+
['id' => 'dispatch_after_current_bus'],
1069+
['id' => 'failed_message_processing_middleware'],
1070+
['id' => 'send_message', 'arguments' => [true]],
1071+
['id' => 'handle_message', 'arguments' => [false]],
1072+
], $container->getParameter('messenger.bus.commands.middleware'));
10871073
$this->assertTrue($container->has('messenger.bus.events'));
10881074
$this->assertSame([], $container->getDefinition('messenger.bus.events')->getArgument(0));
1075+
$this->assertEquals([
1076+
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.events']],
1077+
['id' => 'reject_redelivered_message_middleware'],
1078+
['id' => 'dispatch_after_current_bus'],
1079+
['id' => 'failed_message_processing_middleware'],
1080+
['id' => 'with_factory', 'arguments' => ['foo', true, ['bar' => 'baz']]],
1081+
['id' => 'send_message', 'arguments' => [true]],
1082+
['id' => 'handle_message', 'arguments' => [false]],
1083+
], $container->getParameter('messenger.bus.events.middleware'));
1084+
$this->assertTrue($container->has('messenger.bus.queries'));
1085+
$this->assertSame([], $container->getDefinition('messenger.bus.queries')->getArgument(0));
1086+
$this->assertEquals([
1087+
['id' => 'send_message', 'arguments' => []],
1088+
['id' => 'handle_message', 'arguments' => []],
1089+
], $container->getParameter('messenger.bus.queries.middleware'));
10891090

1090-
if (class_exists(DeduplicateMiddleware::class)) {
1091-
$this->assertEquals([
1092-
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.events']],
1093-
['id' => 'reject_redelivered_message_middleware'],
1094-
['id' => 'dispatch_after_current_bus'],
1095-
['id' => 'failed_message_processing_middleware'],
1096-
['id' => 'deduplicate_middleware'],
1097-
['id' => 'with_factory', 'arguments' => ['foo', true, ['bar' => 'baz']]],
1098-
['id' => 'send_message', 'arguments' => [true]],
1099-
['id' => 'handle_message', 'arguments' => [false]],
1100-
], $container->getParameter('messenger.bus.events.middleware'));
1101-
} else {
1102-
$this->assertEquals([
1103-
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.events']],
1104-
['id' => 'reject_redelivered_message_middleware'],
1105-
['id' => 'dispatch_after_current_bus'],
1106-
['id' => 'failed_message_processing_middleware'],
1107-
['id' => 'with_factory', 'arguments' => ['foo', true, ['bar' => 'baz']]],
1108-
['id' => 'send_message', 'arguments' => [true]],
1109-
['id' => 'handle_message', 'arguments' => [false]],
1110-
], $container->getParameter('messenger.bus.events.middleware'));
1091+
$this->assertTrue($container->hasAlias('messenger.default_bus'));
1092+
$this->assertSame('messenger.bus.commands', (string) $container->getAlias('messenger.default_bus'));
1093+
}
1094+
1095+
public function testMessengerWithMultipleBusesWithDeduplicateMiddleware()
1096+
{
1097+
if (!class_exists(DeduplicateMiddleware::class)) {
1098+
$this->markTestSkipped('DeduplicateMiddleware not available.');
11111099
}
11121100

1101+
$container = $this->createContainerFromFile('messenger_multiple_buses_with_deduplicate_middleware');
1102+
1103+
$this->assertTrue($container->has('messenger.bus.commands'));
1104+
$this->assertSame([], $container->getDefinition('messenger.bus.commands')->getArgument(0));
1105+
$this->assertEquals([
1106+
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.commands']],
1107+
['id' => 'reject_redelivered_message_middleware'],
1108+
['id' => 'dispatch_after_current_bus'],
1109+
['id' => 'failed_message_processing_middleware'],
1110+
['id' => 'deduplicate_middleware'],
1111+
['id' => 'send_message', 'arguments' => [true]],
1112+
['id' => 'handle_message', 'arguments' => [false]],
1113+
], $container->getParameter('messenger.bus.commands.middleware'));
1114+
$this->assertTrue($container->has('messenger.bus.events'));
1115+
$this->assertSame([], $container->getDefinition('messenger.bus.events')->getArgument(0));
1116+
$this->assertEquals([
1117+
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.events']],
1118+
['id' => 'reject_redelivered_message_middleware'],
1119+
['id' => 'dispatch_after_current_bus'],
1120+
['id' => 'failed_message_processing_middleware'],
1121+
['id' => 'deduplicate_middleware'],
1122+
['id' => 'with_factory', 'arguments' => ['foo', true, ['bar' => 'baz']]],
1123+
['id' => 'send_message', 'arguments' => [true]],
1124+
['id' => 'handle_message', 'arguments' => [false]],
1125+
], $container->getParameter('messenger.bus.events.middleware'));
11131126
$this->assertTrue($container->has('messenger.bus.queries'));
11141127
$this->assertSame([], $container->getDefinition('messenger.bus.queries')->getArgument(0));
11151128
$this->assertEquals([

0 commit comments

Comments
 (0)