diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
index d41e0a97b9569..97236fdaf5d8c 100644
--- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
+++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
@@ -1801,17 +1801,18 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
}
$defaultMiddleware = [
- 'before' => [
- ['id' => 'add_bus_name_stamp_middleware'],
- ['id' => 'reject_redelivered_message_middleware'],
- ['id' => 'dispatch_after_current_bus'],
- ['id' => 'failed_message_processing_middleware'],
- ],
+ 'before' => [],
'after' => [
['id' => 'send_message'],
['id' => 'handle_message'],
],
];
+ $defaultMiddleware['before'][] = ['id' => 'add_bus_name_stamp_middleware'];
+ if (!$config['failure_transport']) {
+ $defaultMiddleware['before'][] = ['id' => 'reject_redelivered_message_middleware'];
+ }
+ $defaultMiddleware['before'][] = ['id' => 'dispatch_after_current_bus'];
+ $defaultMiddleware['before'][] = ['id' => 'failed_message_processing_middleware'];
foreach ($config['buses'] as $busId => $bus) {
$middleware = $bus['middleware'];
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_redelivery_failure_disabled.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_redelivery_failure_disabled.php
new file mode 100644
index 0000000000000..7b4562510efd2
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_redelivery_failure_disabled.php
@@ -0,0 +1,10 @@
+loadFromExtension('framework', [
+ 'serializer' => true,
+ 'messenger' => [
+ 'transports' => [
+ 'example' => 'redis://127.0.0.1:6379/messages',
+ ],
+ ],
+]);
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_redelivery_failure_enabled.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_redelivery_failure_enabled.php
new file mode 100644
index 0000000000000..130a428c7b316
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_redelivery_failure_enabled.php
@@ -0,0 +1,12 @@
+loadFromExtension('framework', [
+ 'serializer' => true,
+ 'messenger' => [
+ 'failure_transport' => 'failed',
+ 'transports' => [
+ 'example' => 'redis://127.0.0.1:6379/messages',
+ 'failed' => 'in-memory:///',
+ ],
+ ],
+]);
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_redelivery_failure_disabled.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_redelivery_failure_disabled.xml
new file mode 100644
index 0000000000000..4f12a0bce5cf2
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_redelivery_failure_disabled.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_redelivery_failure_enabled.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_redelivery_failure_enabled.xml
new file mode 100644
index 0000000000000..164e552529dd5
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_redelivery_failure_enabled.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_redelivery_failure_disabled.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_redelivery_failure_disabled.yml
new file mode 100644
index 0000000000000..c4eb7f1c2f4f2
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_redelivery_failure_disabled.yml
@@ -0,0 +1,4 @@
+framework:
+ messenger:
+ transports:
+ example: 'redis://127.0.0.1:6379/messages'
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_redelivery_failure_enabled.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_redelivery_failure_enabled.yml
new file mode 100644
index 0000000000000..538a684beaa1e
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_redelivery_failure_enabled.yml
@@ -0,0 +1,6 @@
+framework:
+ messenger:
+ transports:
+ example: 'redis://127.0.0.1:6379/messages'
+ failed: 'in-memory:///'
+ failure_transport: failed
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php
index d6a3bf5ae995a..6d66ede78e00d 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php
@@ -760,6 +760,18 @@ public function testMessengerTransports()
$this->assertEquals(new Reference('messenger.transport.failed'), $container->getDefinition('messenger.failure.send_failed_message_to_failure_transport_listener')->getArgument(0));
}
+ public function testMessengerRedeliveryFailureTransportDisabled()
+ {
+ $container = $this->createContainerFromFile('messenger_redelivery_failure_disabled');
+ $this->assertContains(['id' => 'reject_redelivered_message_middleware'], $container->getParameter('messenger.bus.default.middleware'));
+ }
+
+ public function testMessengerRedeliveryFailureTransportEnabled()
+ {
+ $container = $this->createContainerFromFile('messenger_redelivery_failure_enabled');
+ $this->assertNotContains(['id' => 'reject_redelivered_message_middleware'], $container->getParameter('messenger.bus.default.middleware'));
+ }
+
public function testMessengerRouting()
{
$container = $this->createContainerFromFile('messenger_routing');