diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php
index 52f81c0a32421..5750dd6de3b69 100644
--- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php
+++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php
@@ -1333,10 +1333,6 @@ function ($a) {
->fixXmlConfig('option')
->children()
->scalarNode('dsn')->end()
- ->booleanNode('reset_on_message')
- ->defaultFalse()
- ->info('Reset container services after each message. Turn it on when the transport is async and run in a worker.')
- ->end()
->scalarNode('serializer')->defaultNull()->info('Service id of a custom serializer to use.')->end()
->arrayNode('options')
->normalizeKeys(false)
@@ -1374,6 +1370,10 @@ function ($a) {
->defaultNull()
->info('Transport name to send failed messages to (after all retries have failed).')
->end()
+ ->booleanNode('reset_on_message')
+ ->defaultNull()
+ ->info('Reset container services after each message.')
+ ->end()
->scalarNode('default_bus')->defaultNull()->end()
->arrayNode('buses')
->defaultValue(['messenger.bus.default' => ['default_middleware' => true, 'middleware' => []]])
diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
index 7ad848b1ed1a0..30ebe5fdb7270 100644
--- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
+++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
@@ -1977,7 +1977,6 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
$senderAliases = [];
$transportRetryReferences = [];
- $transportNamesForResetServices = [];
foreach ($config['transports'] as $name => $transport) {
$serializerId = $transport['serializer'] ?? 'messenger.default_serializer';
$transportDefinition = (new Definition(TransportInterface::class))
@@ -2006,18 +2005,6 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
$transportRetryReferences[$name] = new Reference($retryServiceId);
}
- if ($transport['reset_on_message']) {
- $transportNamesForResetServices[] = $name;
- }
- }
-
- if ($transportNamesForResetServices) {
- $container
- ->getDefinition('messenger.listener.reset_services')
- ->replaceArgument(1, $transportNamesForResetServices)
- ;
- } else {
- $container->removeDefinition('messenger.listener.reset_services');
}
$senderReferences = [];
@@ -2089,6 +2076,17 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
$container->removeDefinition('console.command.messenger_failed_messages_show');
$container->removeDefinition('console.command.messenger_failed_messages_remove');
}
+
+ if (false === $config['reset_on_message']) {
+ throw new LogicException('The "framework.messenger.reset_on_message" configuration option can be set to "true" only. To prevent services resetting after each message you can set the "--no-reset" option in "messenger:consume" command.');
+ }
+
+ if (null === $config['reset_on_message']) {
+ trigger_deprecation('symfony/framework-bundle', '5.4', 'Not setting the "framework.messenger.reset_on_message" configuration option is deprecated, it will default to "true" in version 6.0.');
+
+ $container->getDefinition('console.command.messenger_consume_messages')->replaceArgument(5, null);
+ $container->removeDefinition('messenger.listener.reset_services');
+ }
}
private function registerCacheConfiguration(array $config, ContainerBuilder $container)
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/console.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/console.php
index f6a3063aadf3d..1aee18fbaf7f4 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/console.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/console.php
@@ -142,6 +142,7 @@
service('event_dispatcher'),
service('logger')->nullOnInvalid(),
[], // Receiver names
+ service('messenger.listener.reset_services')->nullOnInvalid(),
])
->tag('console.command')
->tag('monolog.logger', ['channel' => 'messenger'])
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.php
index b83ee8056f221..bca022f903680 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.php
@@ -203,7 +203,6 @@
service('services_resetter'),
abstract_arg('receivers names'),
])
- ->tag('kernel.event_subscriber')
->set('messenger.routable_message_bus', RoutableMessageBus::class)
->args([
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd b/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd
index 47c7edf34f7d5..5852a09ee39b3 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd
@@ -469,6 +469,7 @@
+
@@ -505,7 +506,6 @@
-
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php
index 9d1f5ea421d37..d47ced3796e7a 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php
@@ -535,6 +535,7 @@ class_exists(SemaphoreStore::class) && SemaphoreStore::isSupported() ? 'semaphor
],
'default_bus' => null,
'buses' => ['messenger.bus.default' => ['default_middleware' => true, 'middleware' => []]],
+ 'reset_on_message' => null,
],
'disallow_search_engine_index' => true,
'http_client' => [
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php
index adb8239d04737..73102d522db57 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php
@@ -5,6 +5,7 @@
$container->loadFromExtension('framework', [
'messenger' => [
+ 'reset_on_message' => true,
'routing' => [
FooMessage::class => ['sender.bar', 'sender.biz'],
BarMessage::class => 'sender.foo',
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_middleware_factory_erroneous_format.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_middleware_factory_erroneous_format.php
index cb4ee5e5127b9..e84240008a610 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_middleware_factory_erroneous_format.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_middleware_factory_erroneous_format.php
@@ -2,6 +2,7 @@
$container->loadFromExtension('framework', [
'messenger' => [
+ 'reset_on_message' => true,
'buses' => [
'command_bus' => [
'middleware' => [
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_buses.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_buses.php
index 627e21f3084e9..bc944c660f79e 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_buses.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_buses.php
@@ -2,6 +2,7 @@
$container->loadFromExtension('framework', [
'messenger' => [
+ 'reset_on_message' => true,
'default_bus' => 'messenger.bus.commands',
'buses' => [
'messenger.bus.commands' => null,
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_failure_transports.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_failure_transports.php
index 8f85259aa6908..08d9f95a3106c 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_failure_transports.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_failure_transports.php
@@ -2,6 +2,7 @@
$container->loadFromExtension('framework', [
'messenger' => [
+ 'reset_on_message' => true,
'transports' => [
'transport_1' => [
'dsn' => 'null://',
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_failure_transports_global.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_failure_transports_global.php
index 0cff76887b152..184daa165e17d 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_failure_transports_global.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_failure_transports_global.php
@@ -3,6 +3,7 @@
$container->loadFromExtension('framework', [
'messenger' => [
'failure_transport' => 'failure_transport_global',
+ 'reset_on_message' => true,
'transports' => [
'transport_1' => [
'dsn' => 'null://',
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing.php
index eb459509015dd..3aaeaffe36d78 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing.php
@@ -3,6 +3,7 @@
$container->loadFromExtension('framework', [
'serializer' => true,
'messenger' => [
+ 'reset_on_message' => true,
'serializer' => [
'default_serializer' => 'messenger.transport.symfony_serializer',
],
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing_invalid_transport.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing_invalid_transport.php
index ee77e3a3f2dbf..2d31fe5d0e821 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing_invalid_transport.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing_invalid_transport.php
@@ -3,6 +3,7 @@
$container->loadFromExtension('framework', [
'serializer' => true,
'messenger' => [
+ 'reset_on_message' => true,
'serializer' => [
'default_serializer' => 'messenger.transport.symfony_serializer',
],
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing_single.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing_single.php
index e58814589b870..594a79171602c 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing_single.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing_single.php
@@ -2,6 +2,7 @@
$container->loadFromExtension('framework', [
'messenger' => [
+ 'reset_on_message' => true,
'routing' => [
'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\DummyMessage' => ['amqp'],
],
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport.php
index 7baab29dc57ce..352f244a4f201 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport.php
@@ -3,6 +3,7 @@
$container->loadFromExtension('framework', [
'serializer' => true,
'messenger' => [
+ 'reset_on_message' => true,
'serializer' => [
'default_serializer' => 'messenger.transport.symfony_serializer',
'symfony_serializer' => [
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transports.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transports.php
index 1c8b56683d2e5..746415729bb7e 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transports.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transports.php
@@ -4,6 +4,7 @@
'serializer' => true,
'messenger' => [
'failure_transport' => 'failed',
+ 'reset_on_message' => true,
'serializer' => [
'default_serializer' => 'messenger.transport.symfony_serializer',
],
@@ -11,7 +12,6 @@
'default' => 'amqp://localhost/%2f/messages',
'customised' => [
'dsn' => 'amqp://localhost/%2f/messages?exchange_name=exchange_name',
- 'reset_on_message' => true,
'options' => ['queue' => ['name' => 'Queue']],
'serializer' => 'messenger.transport.native_php_serializer',
'retry_strategy' => [
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_with_disabled_reset_on_message.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_with_disabled_reset_on_message.php
new file mode 100644
index 0000000000000..dda2e30108b87
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_with_disabled_reset_on_message.php
@@ -0,0 +1,19 @@
+loadFromExtension('framework', [
+ 'messenger' => [
+ 'reset_on_message' => false,
+ 'routing' => [
+ FooMessage::class => ['sender.bar', 'sender.biz'],
+ BarMessage::class => 'sender.foo',
+ ],
+ 'transports' => [
+ 'sender.biz' => 'null://',
+ 'sender.bar' => 'null://',
+ 'sender.foo' => 'null://',
+ ],
+ ],
+]);
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_without_reset_on_message_legacy.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_without_reset_on_message_legacy.php
new file mode 100644
index 0000000000000..adb8239d04737
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_without_reset_on_message_legacy.php
@@ -0,0 +1,18 @@
+loadFromExtension('framework', [
+ 'messenger' => [
+ 'routing' => [
+ FooMessage::class => ['sender.bar', 'sender.biz'],
+ BarMessage::class => 'sender.foo',
+ ],
+ 'transports' => [
+ 'sender.biz' => 'null://',
+ 'sender.bar' => 'null://',
+ 'sender.foo' => 'null://',
+ ],
+ ],
+]);
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/notifier.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/notifier.php
index 5ffe142be4dfc..51697db21c3de 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/notifier.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/notifier.php
@@ -5,7 +5,8 @@
$container->loadFromExtension('framework', [
'messenger' => [
- 'enabled' => true
+ 'enabled' => true,
+ 'reset_on_message' => true,
],
'mailer' => [
'dsn' => 'smtp://example.com',
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/notifier_without_mailer.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/notifier_without_mailer.php
index 6d51ef98517f4..f6f5366523507 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/notifier_without_mailer.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/notifier_without_mailer.php
@@ -9,6 +9,7 @@
],
'messenger' => [
'enabled' => true,
+ 'reset_on_message' => true,
],
'notifier' => [
'enabled' => true,
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger.xml
index bacd772dcb6fc..1451bb66f516d 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger.xml
@@ -6,7 +6,7 @@
http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_buses.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_buses.xml
index 1642e57988505..923b6a9579aa7 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_buses.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_buses.xml
@@ -6,7 +6,7 @@
http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_failure_transports.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_failure_transports.xml
index b8e9f19759429..439575ccb03fe 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_failure_transports.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_failure_transports.xml
@@ -6,7 +6,7 @@
http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_failure_transports_global.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_failure_transports_global.xml
index c6e5c530fda1b..ddd0fa598fab7 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_failure_transports_global.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_failure_transports_global.xml
@@ -6,7 +6,7 @@
http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing.xml
index 0b022e78a0c8c..89608adf6b569 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing.xml
@@ -7,7 +7,7 @@
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing_invalid_transport.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing_invalid_transport.xml
index 98c487fbf8bfa..63d9035692181 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing_invalid_transport.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing_invalid_transport.xml
@@ -7,7 +7,7 @@
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing_single.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing_single.xml
index 349a3728d3935..5ce5029991be1 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing_single.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing_single.xml
@@ -6,7 +6,7 @@
http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport.xml
index e5e60a39823a6..b822ab6b95aa0 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport.xml
@@ -7,7 +7,7 @@
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transports.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transports.xml
index dfa3232997c52..f6637f891a040 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transports.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transports.xml
@@ -7,10 +7,10 @@
-
+
-
+
Queue
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_with_disabled_reset_on_message.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_with_disabled_reset_on_message.xml
new file mode 100644
index 0000000000000..67a2a414e8fcf
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_with_disabled_reset_on_message.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_without_reset_on_message_legacy.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_without_reset_on_message_legacy.xml
new file mode 100644
index 0000000000000..bacd772dcb6fc
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_without_reset_on_message_legacy.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/notifier.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/notifier.xml
index 47e2e2b0c1b13..0913327ed1771 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/notifier.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/notifier.xml
@@ -6,7 +6,7 @@
http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
-
+
null
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/notifier_without_mailer.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/notifier_without_mailer.xml
index 1c62b5265b897..107a235fae369 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/notifier_without_mailer.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/notifier_without_mailer.xml
@@ -7,7 +7,7 @@
-
+
null
null
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml
index 82fea3b27af23..3bf374f474c75 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml
@@ -1,5 +1,6 @@
framework:
messenger:
+ reset_on_message: true
routing:
'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\FooMessage': ['sender.bar', 'sender.biz']
'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\BarMessage': 'sender.foo'
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_middleware_factory_erroneous_format.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_middleware_factory_erroneous_format.yml
index 74431414ba99c..a55251f4da062 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_middleware_factory_erroneous_format.yml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_middleware_factory_erroneous_format.yml
@@ -1,5 +1,6 @@
framework:
messenger:
+ reset_on_message: true
buses:
command_bus:
middleware:
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_buses.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_buses.yml
index 0e67039733272..8b0d2b98ef126 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_buses.yml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_buses.yml
@@ -1,5 +1,6 @@
framework:
messenger:
+ reset_on_message: true
default_bus: messenger.bus.commands
buses:
messenger.bus.commands: ~
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_failure_transports.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_failure_transports.yml
index 863f18a7d1a1f..ba296162d6d8f 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_failure_transports.yml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_failure_transports.yml
@@ -1,5 +1,6 @@
framework:
messenger:
+ reset_on_message: true
transports:
transport_1:
dsn: 'null://'
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_failure_transports_global.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_failure_transports_global.yml
index 10023edb0b9fd..6ca54c277a5d4 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_failure_transports_global.yml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_failure_transports_global.yml
@@ -1,5 +1,6 @@
framework:
messenger:
+ reset_on_message: true
failure_transport: failure_transport_global
transports:
transport_1:
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing.yml
index 0e493eb882a02..dcde58a026b51 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing.yml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing.yml
@@ -1,6 +1,7 @@
framework:
serializer: true
messenger:
+ reset_on_message: true
serializer:
default_serializer: messenger.transport.symfony_serializer
routing:
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing_invalid_transport.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing_invalid_transport.yml
index 3bf0f2ddf9c03..65f6de8ffa319 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing_invalid_transport.yml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing_invalid_transport.yml
@@ -1,6 +1,7 @@
framework:
serializer: true
messenger:
+ reset_on_message: true
serializer:
default_serializer: messenger.transport.symfony_serializer
routing:
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing_single.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing_single.yml
index caa88641887c7..6957cb4bf35b2 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing_single.yml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing_single.yml
@@ -1,5 +1,6 @@
framework:
messenger:
+ reset_on_message: true
routing:
'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\DummyMessage': [amqp]
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport.yml
index b51feb73bce95..6df55ccd19941 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport.yml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport.yml
@@ -1,6 +1,7 @@
framework:
serializer: true
messenger:
+ reset_on_message: true
serializer:
default_serializer: messenger.transport.symfony_serializer
symfony_serializer:
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transports.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transports.yml
index fb2827729d5e2..555f512daae07 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transports.yml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transports.yml
@@ -2,13 +2,13 @@ framework:
serializer: true
messenger:
failure_transport: failed
+ reset_on_message: true
serializer:
default_serializer: messenger.transport.symfony_serializer
transports:
default: 'amqp://localhost/%2f/messages'
customised:
dsn: 'amqp://localhost/%2f/messages?exchange_name=exchange_name'
- reset_on_message: true
options:
queue:
name: Queue
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_with_disabled_reset_on_message.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_with_disabled_reset_on_message.yml
new file mode 100644
index 0000000000000..f67395c85c191
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_with_disabled_reset_on_message.yml
@@ -0,0 +1,10 @@
+framework:
+ messenger:
+ reset_on_message: false
+ routing:
+ 'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\FooMessage': ['sender.bar', 'sender.biz']
+ 'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\BarMessage': 'sender.foo'
+ transports:
+ sender.biz: 'null://'
+ sender.bar: 'null://'
+ sender.foo: 'null://'
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_without_reset_on_message_legacy.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_without_reset_on_message_legacy.yml
new file mode 100644
index 0000000000000..82fea3b27af23
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_without_reset_on_message_legacy.yml
@@ -0,0 +1,9 @@
+framework:
+ messenger:
+ routing:
+ 'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\FooMessage': ['sender.bar', 'sender.biz']
+ 'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\BarMessage': 'sender.foo'
+ transports:
+ sender.biz: 'null://'
+ sender.bar: 'null://'
+ sender.foo: 'null://'
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/notifier.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/notifier.yml
index 586cb98a4a138..e03dd738b8b96 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/notifier.yml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/notifier.yml
@@ -1,6 +1,7 @@
framework:
messenger:
enabled: true
+ reset_on_message: true
mailer:
dsn: 'smtp://example.com'
notifier:
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/notifier_without_mailer.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/notifier_without_mailer.yml
index 75fa3cf889825..2582aaf438992 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/notifier_without_mailer.yml
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/notifier_without_mailer.yml
@@ -3,6 +3,7 @@ framework:
enabled: false
messenger:
enabled: true
+ reset_on_message: true
notifier:
enabled: true
notification_on_failed_messages: true
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php
index 7b33312a8c2d8..d425a3aa55bcc 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php
@@ -712,6 +712,26 @@ public function testMessengerServicesRemovedWhenDisabled()
$this->assertFalse($container->hasDefinition('cache.messenger.restart_workers_signal'));
}
+ /**
+ * @group legacy
+ */
+ public function testMessengerWithoutResetOnMessageLegacy()
+ {
+ $this->expectDeprecation('Since symfony/framework-bundle 5.4: Not setting the "framework.messenger.reset_on_message" configuration option is deprecated, it will default to "true" in version 6.0.');
+
+ $container = $this->createContainerFromFile('messenger_without_reset_on_message_legacy');
+
+ $this->assertTrue($container->hasDefinition('console.command.messenger_consume_messages'));
+ $this->assertTrue($container->hasAlias('messenger.default_bus'));
+ $this->assertTrue($container->getAlias('messenger.default_bus')->isPublic());
+ $this->assertTrue($container->hasDefinition('messenger.transport.amqp.factory'));
+ $this->assertTrue($container->hasDefinition('messenger.transport.redis.factory'));
+ $this->assertTrue($container->hasDefinition('messenger.transport_factory'));
+ $this->assertSame(TransportFactory::class, $container->getDefinition('messenger.transport_factory')->getClass());
+ $this->assertFalse($container->hasDefinition('messenger.listener.reset_services'));
+ $this->assertNull($container->getDefinition('console.command.messenger_consume_messages')->getArgument(5));
+ }
+
public function testMessenger()
{
$container = $this->createContainerFromFile('messenger');
@@ -722,7 +742,8 @@ public function testMessenger()
$this->assertTrue($container->hasDefinition('messenger.transport.redis.factory'));
$this->assertTrue($container->hasDefinition('messenger.transport_factory'));
$this->assertSame(TransportFactory::class, $container->getDefinition('messenger.transport_factory')->getClass());
- $this->assertFalse($container->hasDefinition('messenger.listener.reset_services'));
+ $this->assertTrue($container->hasDefinition('messenger.listener.reset_services'));
+ $this->assertSame('messenger.listener.reset_services', (string) $container->getDefinition('console.command.messenger_consume_messages')->getArgument(5));
}
public function testMessengerMultipleFailureTransports()
@@ -867,9 +888,6 @@ public function testMessengerTransports()
return array_shift($values);
}, $failureTransports);
$this->assertEquals($expectedTransportsByFailureTransports, $failureTransportsReferences);
-
- $this->assertTrue($container->hasDefinition('messenger.listener.reset_services'));
- $this->assertSame(['customised'], $container->getDefinition('messenger.listener.reset_services')->getArgument(1));
}
public function testMessengerRouting()
@@ -955,6 +973,14 @@ public function testMessengerInvalidTransportRouting()
$this->createContainerFromFile('messenger_routing_invalid_transport');
}
+ public function testMessengerWithDisabledResetOnMessage()
+ {
+ $this->expectException(LogicException::class);
+ $this->expectExceptionMessage('The "framework.messenger.reset_on_message" configuration option can be set to "true" only. To prevent services resetting after each message you can set the "--no-reset" option in "messenger:consume" command.');
+
+ $this->createContainerFromFile('messenger_with_disabled_reset_on_message');
+ }
+
public function testTranslator()
{
$container = $this->createContainerFromFile('full');
diff --git a/src/Symfony/Component/Messenger/Command/ConsumeMessagesCommand.php b/src/Symfony/Component/Messenger/Command/ConsumeMessagesCommand.php
index 8707a941c7062..29e65474055d7 100644
--- a/src/Symfony/Component/Messenger/Command/ConsumeMessagesCommand.php
+++ b/src/Symfony/Component/Messenger/Command/ConsumeMessagesCommand.php
@@ -23,6 +23,7 @@
use Symfony\Component\Console\Question\ChoiceQuestion;
use Symfony\Component\Console\Style\SymfonyStyle;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
+use Symfony\Component\Messenger\EventListener\ResetServicesListener;
use Symfony\Component\Messenger\EventListener\StopWorkerOnFailureLimitListener;
use Symfony\Component\Messenger\EventListener\StopWorkerOnMemoryLimitListener;
use Symfony\Component\Messenger\EventListener\StopWorkerOnMessageLimitListener;
@@ -40,17 +41,19 @@ class ConsumeMessagesCommand extends Command
private $routableBus;
private $receiverLocator;
+ private $eventDispatcher;
private $logger;
private $receiverNames;
- private $eventDispatcher;
+ private $resetServicesListener;
- public function __construct(RoutableMessageBus $routableBus, ContainerInterface $receiverLocator, EventDispatcherInterface $eventDispatcher, LoggerInterface $logger = null, array $receiverNames = [])
+ public function __construct(RoutableMessageBus $routableBus, ContainerInterface $receiverLocator, EventDispatcherInterface $eventDispatcher, LoggerInterface $logger = null, array $receiverNames = [], ResetServicesListener $resetServicesListener = null)
{
$this->routableBus = $routableBus;
$this->receiverLocator = $receiverLocator;
+ $this->eventDispatcher = $eventDispatcher;
$this->logger = $logger;
$this->receiverNames = $receiverNames;
- $this->eventDispatcher = $eventDispatcher;
+ $this->resetServicesListener = $resetServicesListener;
parent::__construct();
}
@@ -72,6 +75,7 @@ protected function configure(): void
new InputOption('sleep', null, InputOption::VALUE_REQUIRED, 'Seconds to sleep before asking for new messages after no messages were found', 1),
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)'),
new InputOption('queues', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Limit receivers to only consume from the specified queues'),
+ new InputOption('no-reset', null, InputOption::VALUE_NONE, 'Do not reset container services after each message'),
])
->setDescription(self::$defaultDescription)
->setHelp(<<<'EOF'
@@ -109,6 +113,10 @@ protected function configure(): void
Use the --queues option to limit a receiver to only certain queues (only supported by some receivers):
php %command.full_name% --queues=fasttrack
+
+Use the --no-reset option to prevent services resetting after each message (may lead to leaking services' state between messages):
+
+ php %command.full_name% --no-reset
EOF
)
;
@@ -159,6 +167,10 @@ protected function execute(InputInterface $input, OutputInterface $output)
$receivers[$receiverName] = $this->receiverLocator->get($receiverName);
}
+ if (null !== $this->resetServicesListener && !$input->getOption('no-reset')) {
+ $this->eventDispatcher->addSubscriber($this->resetServicesListener);
+ }
+
$stopsWhen = [];
if ($limit = $input->getOption('limit')) {
$stopsWhen[] = "processed {$limit} messages";
diff --git a/src/Symfony/Component/Messenger/EventListener/ResetServicesListener.php b/src/Symfony/Component/Messenger/EventListener/ResetServicesListener.php
index 56b08ec5fd54b..7bbd32c4fa585 100644
--- a/src/Symfony/Component/Messenger/EventListener/ResetServicesListener.php
+++ b/src/Symfony/Component/Messenger/EventListener/ResetServicesListener.php
@@ -13,9 +13,7 @@
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\DependencyInjection\ServicesResetter;
-use Symfony\Component\Messenger\Event\AbstractWorkerMessageEvent;
-use Symfony\Component\Messenger\Event\WorkerMessageFailedEvent;
-use Symfony\Component\Messenger\Event\WorkerMessageHandledEvent;
+use Symfony\Component\Messenger\Event\WorkerRunningEvent;
/**
* @author Grégoire Pineau
@@ -23,28 +21,23 @@
class ResetServicesListener implements EventSubscriberInterface
{
private $servicesResetter;
- private $receiversName;
- public function __construct(ServicesResetter $servicesResetter, array $receiversName)
+ public function __construct(ServicesResetter $servicesResetter)
{
$this->servicesResetter = $servicesResetter;
- $this->receiversName = $receiversName;
}
- public function resetServices(AbstractWorkerMessageEvent $event)
+ public function resetServices(WorkerRunningEvent $event): void
{
- if (!\in_array($event->getReceiverName(), $this->receiversName, true)) {
- return;
+ if (!$event->isWorkerIdle()) {
+ $this->servicesResetter->reset();
}
-
- $this->servicesResetter->reset();
}
- public static function getSubscribedEvents()
+ public static function getSubscribedEvents(): array
{
return [
- WorkerMessageHandledEvent::class => ['resetServices'],
- WorkerMessageFailedEvent::class => ['resetServices'],
+ WorkerRunningEvent::class => ['resetServices'],
];
}
}
diff --git a/src/Symfony/Component/Messenger/Tests/Command/ConsumeMessagesCommandTest.php b/src/Symfony/Component/Messenger/Tests/Command/ConsumeMessagesCommandTest.php
index e904e0ef647e6..208f16b44ddc0 100644
--- a/src/Symfony/Component/Messenger/Tests/Command/ConsumeMessagesCommandTest.php
+++ b/src/Symfony/Component/Messenger/Tests/Command/ConsumeMessagesCommandTest.php
@@ -18,8 +18,10 @@
use Symfony\Component\DependencyInjection\ServiceLocator;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
+use Symfony\Component\HttpKernel\DependencyInjection\ServicesResetter;
use Symfony\Component\Messenger\Command\ConsumeMessagesCommand;
use Symfony\Component\Messenger\Envelope;
+use Symfony\Component\Messenger\EventListener\ResetServicesListener;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Messenger\RoutableMessageBus;
use Symfony\Component\Messenger\Stamp\BusNameStamp;
@@ -99,4 +101,53 @@ public function testRunWithBusOption()
$tester->assertCommandIsSuccessful();
$this->assertStringContainsString('[OK] Consuming messages from transports "dummy-receiver"', $tester->getDisplay());
}
+
+ public function provideRunWithResetServicesOption(): iterable
+ {
+ yield [true];
+ yield [false];
+ }
+
+ /**
+ * @dataProvider provideRunWithResetServicesOption
+ */
+ public function testRunWithResetServicesOption(bool $shouldReset)
+ {
+ $envelope = new Envelope(new \stdClass());
+
+ $receiver = $this->createMock(ReceiverInterface::class);
+ $receiver
+ ->expects($this->exactly(3))
+ ->method('get')
+ ->willReturnOnConsecutiveCalls(
+ [$envelope],
+ [/* idle */],
+ [$envelope, $envelope]
+ );
+ $msgCount = 3;
+
+ $receiverLocator = $this->createMock(ContainerInterface::class);
+ $receiverLocator->expects($this->once())->method('has')->with('dummy-receiver')->willReturn(true);
+ $receiverLocator->expects($this->once())->method('get')->with('dummy-receiver')->willReturn($receiver);
+
+ $bus = $this->createMock(RoutableMessageBus::class);
+ $bus->expects($this->exactly($msgCount))->method('dispatch');
+
+ $servicesResetter = $this->createMock(ServicesResetter::class);
+ $servicesResetter->expects($this->exactly($shouldReset ? $msgCount : 0))->method('reset');
+
+ $command = new ConsumeMessagesCommand($bus, $receiverLocator, new EventDispatcher(), null, [], new ResetServicesListener($servicesResetter));
+
+ $application = new Application();
+ $application->add($command);
+ $tester = new CommandTester($application->get('messenger:consume'));
+ $tester->execute(array_merge([
+ 'receivers' => ['dummy-receiver'],
+ '--sleep' => '0.001', // do not sleep too long
+ '--limit' => $msgCount,
+ ], $shouldReset ? [] : ['--no-reset' => null]));
+
+ $tester->assertCommandIsSuccessful();
+ $this->assertStringContainsString('[OK] Consuming messages from transports "dummy-receiver"', $tester->getDisplay());
+ }
}
diff --git a/src/Symfony/Component/Messenger/Tests/EventListener/ResetServicesListenerTest.php b/src/Symfony/Component/Messenger/Tests/EventListener/ResetServicesListenerTest.php
index a14fe113cfde3..ce8f771a0952f 100644
--- a/src/Symfony/Component/Messenger/Tests/EventListener/ResetServicesListenerTest.php
+++ b/src/Symfony/Component/Messenger/Tests/EventListener/ResetServicesListenerTest.php
@@ -13,27 +13,29 @@
use PHPUnit\Framework\TestCase;
use Symfony\Component\HttpKernel\DependencyInjection\ServicesResetter;
-use Symfony\Component\Messenger\Envelope;
-use Symfony\Component\Messenger\Event\AbstractWorkerMessageEvent;
+use Symfony\Component\Messenger\Event\WorkerRunningEvent;
use Symfony\Component\Messenger\EventListener\ResetServicesListener;
+use Symfony\Component\Messenger\Worker;
class ResetServicesListenerTest extends TestCase
{
- public function provideTests(): iterable
+ public function provideResetServices(): iterable
{
- yield ['foo', true];
- yield ['bar', false];
+ yield [true];
+ yield [false];
}
- /** @dataProvider provideTests */
- public function test(string $receiverName, bool $shouldReset)
+ /**
+ * @dataProvider provideResetServices
+ */
+ public function testResetServices(bool $shouldReset)
{
$servicesResetter = $this->createMock(ServicesResetter::class);
$servicesResetter->expects($shouldReset ? $this->once() : $this->never())->method('reset');
- $event = new class(new Envelope(new \stdClass()), $receiverName) extends AbstractWorkerMessageEvent {};
+ $event = new WorkerRunningEvent($this->createMock(Worker::class), !$shouldReset);
- $resetListener = new ResetServicesListener($servicesResetter, ['foo']);
+ $resetListener = new ResetServicesListener($servicesResetter);
$resetListener->resetServices($event);
}
}