diff --git a/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/ReactorRabbitMQChannelPool.java b/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/ReactorRabbitMQChannelPool.java
index 1de99d3..4e74850 100644
--- a/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/ReactorRabbitMQChannelPool.java
+++ b/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/ReactorRabbitMQChannelPool.java
@@ -22,6 +22,7 @@
 import java.io.IOException;
 import java.time.Duration;
 import java.util.Comparator;
+import java.util.Optional;
 import java.util.concurrent.ConcurrentSkipListSet;
 import java.util.function.BiConsumer;
 
@@ -131,6 +132,17 @@
             return retries -> minBorrowDelay -> maxChannel -> new Configuration(minBorrowDelay, retries, maxChannel);
         }
 
+        public static Configuration from(org.apache.commons.configuration2.Configuration configuration) {
+            Duration minBorrowDelay = Optional.ofNullable(configuration.getLong("channel.pool.min.delay.ms", null))
+                    .map(Duration::ofMillis)
+                    .orElse(MIN_BORROW_DELAY);
+
+            return builder()
+                .retries(configuration.getInt("channel.pool.retries", MAX_BORROW_RETRIES))
+                .minBorrowDelay(minBorrowDelay)
+                .maxChannel(configuration.getInt("channel.pool.size", MAX_CHANNELS_NUMBER));
+        }
+
         private final Duration minBorrowDelay;
         private final int retries;
         private final int maxChannel;
diff --git a/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/SimpleConnectionPool.java b/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/SimpleConnectionPool.java
index 6941009..635aaa8 100644
--- a/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/SimpleConnectionPool.java
+++ b/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/SimpleConnectionPool.java
@@ -57,6 +57,12 @@
             return retries -> initialDelay -> new Configuration(retries, initialDelay);
         }
 
+        public static Configuration from(org.apache.commons.configuration2.Configuration configuration) {
+            return builder()
+                .retries(configuration.getInt("connection.pool.retries", 10))
+                .initialDelay(Duration.ofMillis(configuration.getLong("connection.pool.min.delay.ms", 100)));
+        }
+
         private final int numRetries;
         private final Duration initialDelay;
 
diff --git a/dockerfiles/run/guice/cassandra-rabbitmq-ldap/destination/conf/rabbitmq.properties b/dockerfiles/run/guice/cassandra-rabbitmq-ldap/destination/conf/rabbitmq.properties
index 05712ed..f8b443d 100644
--- a/dockerfiles/run/guice/cassandra-rabbitmq-ldap/destination/conf/rabbitmq.properties
+++ b/dockerfiles/run/guice/cassandra-rabbitmq-ldap/destination/conf/rabbitmq.properties
@@ -13,6 +13,22 @@
 # Mandatory
 management.password=guest
 
+# Configure retries count to retrieve a connection. Exponential backoff is performed between each retries.
+# Optional integer, defaults to 10
+#connection.pool.retries=10
+# Configure initial duration (in ms) between two connection retries. Exponential backoff is performed between each retries.
+# Optional integer, defaults to 100
+#connection.pool.min.delay.ms=100
+# Configure retries count to retrieve a channel. Exponential backoff is performed between each retries.
+# Optional integer, defaults to 3
+#channel.pool.retries=3
+# Configure initial duration (in ms) between two channel retries. Exponential backoff is performed between each retries.
+# Optional integer, defaults to 50
+#channel.pool.min.delay.ms=50
+# Configure the size of the channel pool.
+# Optional integer, defaults to 3
+#channel.pool.size=3
+
 # Parameters for the Cassandra administrative view
 
 # Period of the window. Too large values will lead to wide rows while too little values might lead to many queries.
diff --git a/dockerfiles/run/guice/cassandra-rabbitmq/destination/conf/rabbitmq.properties b/dockerfiles/run/guice/cassandra-rabbitmq/destination/conf/rabbitmq.properties
index c2052b2..83c4019 100644
--- a/dockerfiles/run/guice/cassandra-rabbitmq/destination/conf/rabbitmq.properties
+++ b/dockerfiles/run/guice/cassandra-rabbitmq/destination/conf/rabbitmq.properties
@@ -13,6 +13,22 @@
 # Mandatory
 management.password=guest
 
+# Configure retries count to retrieve a connection. Exponential backoff is performed between each retries.
+# Optional integer, defaults to 10
+#connection.pool.retries=10
+# Configure initial duration (in ms) between two connection retries. Exponential backoff is performed between each retries.
+# Optional integer, defaults to 100
+#connection.pool.min.delay.ms=100
+# Configure retries count to retrieve a channel. Exponential backoff is performed between each retries.
+# Optional integer, defaults to 3
+#channel.pool.retries=3
+# Configure initial duration (in ms) between two channel retries. Exponential backoff is performed between each retries.
+# Optional integer, defaults to 50
+#channel.pool.min.delay.ms=50
+# Configure the size of the channel pool.
+# Optional integer, defaults to 3
+#channel.pool.size=3
+
 # Parameters for the Cassandra administrative view
 
 # Period of the window. Too large values will lead to wide rows while too little values might lead to many queries.
diff --git a/docs/modules/servers/pages/distributed/configure/rabbitmq.adoc b/docs/modules/servers/pages/distributed/configure/rabbitmq.adoc
index fdd6572..589460b 100644
--- a/docs/modules/servers/pages/distributed/configure/rabbitmq.adoc
+++ b/docs/modules/servers/pages/distributed/configure/rabbitmq.adoc
@@ -26,6 +26,26 @@
 | management.password
 | password used to access management service
 
+| connection.pool.retries
+| Configure retries count to retrieve a connection. Exponential backoff is performed between each retries.
+Optional integer, defaults to 10
+
+| connection.pool.min.delay.ms
+| Configure initial duration (in ms) between two connection retries. Exponential backoff is performed between each retries.
+Optional integer, defaults to 100
+
+| channel.pool.retries
+| Configure retries count to retrieve a channel. Exponential backoff is performed between each retries.
+Optional integer, defaults to 3
+
+| channel.pool.min.delay.ms
+| Configure initial duration (in ms) between two channel retries. Exponential backoff is performed between each retries.
+Optional integer, defaults to 50
+
+| channel.pool.size
+| Configure the size of the channel pool.
+Optional integer, defaults to 3
+
 |===
 
 == RabbitMQ MailQueue Configuration
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/DockerRabbitMQRule.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/DockerRabbitMQRule.java
index 08889b8..4556b03 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/DockerRabbitMQRule.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/DockerRabbitMQRule.java
@@ -22,12 +22,15 @@
 import static org.apache.james.backends.rabbitmq.RabbitMQFixture.DEFAULT_MANAGEMENT_CREDENTIAL;
 
 import java.net.URISyntaxException;
+import java.time.Duration;
 
 import org.apache.james.CleanupTasksPerformer;
 import org.apache.james.GuiceModuleTestRule;
 import org.apache.james.backends.rabbitmq.DockerRabbitMQ;
 import org.apache.james.backends.rabbitmq.DockerRabbitMQSingleton;
 import org.apache.james.backends.rabbitmq.RabbitMQConfiguration;
+import org.apache.james.backends.rabbitmq.ReactorRabbitMQChannelPool;
+import org.apache.james.backends.rabbitmq.SimpleConnectionPool;
 import org.junit.runner.Description;
 import org.junit.runners.model.Statement;
 
@@ -56,6 +59,15 @@
                     throw new RuntimeException(e);
                 }
             },
+            binder -> binder.bind(ReactorRabbitMQChannelPool.Configuration.class)
+                .toInstance(ReactorRabbitMQChannelPool.Configuration.builder()
+                    .retries(2)
+                    .minBorrowDelay(java.time.Duration.ofMillis(5))
+                    .maxChannel(3)),
+            binder -> binder.bind(SimpleConnectionPool.Configuration.class)
+                .toInstance(SimpleConnectionPool.Configuration.builder()
+                    .retries(2)
+                    .initialDelay(Duration.ofMillis(5))),
             binder -> Multibinder.newSetBinder(binder, CleanupTasksPerformer.CleanupTask.class)
                 .addBinding()
                 .to(TestRabbitMQModule.QueueCleanUp.class));
diff --git a/server/container/guice/queue/rabbitmq/src/main/java/org/apache/james/modules/queue/rabbitmq/RabbitMQModule.java b/server/container/guice/queue/rabbitmq/src/main/java/org/apache/james/modules/queue/rabbitmq/RabbitMQModule.java
index 18ae72e..2e58ce2 100644
--- a/server/container/guice/queue/rabbitmq/src/main/java/org/apache/james/modules/queue/rabbitmq/RabbitMQModule.java
+++ b/server/container/guice/queue/rabbitmq/src/main/java/org/apache/james/modules/queue/rabbitmq/RabbitMQModule.java
@@ -21,6 +21,7 @@
 import java.io.FileNotFoundException;
 
 import javax.inject.Named;
+import javax.inject.Provider;
 import javax.inject.Singleton;
 
 import org.apache.commons.configuration2.ex.ConfigurationException;
@@ -178,13 +179,23 @@
 
     @Provides
     @Singleton
-    public SimpleConnectionPool.Configuration provideConnectionPoolConfiguration() {
-        return SimpleConnectionPool.Configuration.DEFAULT;
+    public SimpleConnectionPool.Configuration provideConnectionPoolConfiguration(@Named(RABBITMQ_CONFIGURATION_NAME) Provider<org.apache.commons.configuration2.Configuration> configuration) {
+        try {
+            return SimpleConnectionPool.Configuration.from(configuration.get());
+        } catch (Exception e) {
+            LOGGER.info("Error while retrieving SimpleConnectionPool.Configuration, falling back to defaults.", e);
+            return SimpleConnectionPool.Configuration.DEFAULT;
+        }
     }
 
     @Provides
     @Singleton
-    public ReactorRabbitMQChannelPool.Configuration provideChannelPoolConfiguration() {
-        return ReactorRabbitMQChannelPool.Configuration.DEFAULT;
+    public ReactorRabbitMQChannelPool.Configuration provideChannelPoolConfiguration(@Named(RABBITMQ_CONFIGURATION_NAME) Provider<org.apache.commons.configuration2.Configuration> configuration) {
+        try {
+            return ReactorRabbitMQChannelPool.Configuration.from(configuration.get());
+        } catch (Exception e) {
+            LOGGER.info("Error while retrieving ReactorRabbitMQChannelPool.Configuration, falling back to defaults.", e);
+            return ReactorRabbitMQChannelPool.Configuration.DEFAULT;
+        }
     }
 }
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQEventDeadLettersIntegrationTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQEventDeadLettersIntegrationTest.java
index 840f226..6fd1454 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQEventDeadLettersIntegrationTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQEventDeadLettersIntegrationTest.java
@@ -224,12 +224,7 @@
                     .maxRetries(MAX_RETRIES)
                     .firstBackoff(java.time.Duration.ofMillis(10))
                     .jitterFactor(0.2)
-                    .build()))
-            .overrideWith(binder -> binder.bind(ReactorRabbitMQChannelPool.Configuration.class)
-                .toInstance(ReactorRabbitMQChannelPool.Configuration.builder()
-                    .retries(2)
-                    .minBorrowDelay(java.time.Duration.ofMillis(5))
-                    .maxChannel(3))))
+                    .build())))
         .build();
 
     private static final String DOMAIN = "domain.tld";
diff --git a/src/site/xdoc/server/config-rabbitmq.xml b/src/site/xdoc/server/config-rabbitmq.xml
index bb998b2..b0b7e7a 100644
--- a/src/site/xdoc/server/config-rabbitmq.xml
+++ b/src/site/xdoc/server/config-rabbitmq.xml
@@ -57,6 +57,26 @@
 
           <dt><strong>management.password</strong></dt>
           <dd>password used to access management service</dd>
+
+          <dt><strong>connection.pool.retries</strong></dt>
+          <dd>Configure retries count to retrieve a connection. Exponential backoff is performed between each retries.
+              Optional integer, defaults to 10</dd>
+
+          <dt><strong>connection.pool.min.delay.ms</strong></dt>
+          <dd>Configure initial duration (in ms) between two connection retries. Exponential backoff is performed between each retries.
+              Optional integer, defaults to 100</dd>
+
+          <dt><strong>channel.pool.retries</strong></dt>
+          <dd>Configure retries count to retrieve a channel. Exponential backoff is performed between each retries.
+              Optional integer, defaults to 3</dd>
+
+          <dt><strong>channel.pool.min.delay.ms</strong></dt>
+          <dd>Configure initial duration (in ms) between two channel retries. Exponential backoff is performed between each retries.
+              Optional integer, defaults to 50</dd>
+
+          <dt><strong>channel.pool.size</strong></dt>
+          <dd>Configure the size of the channel pool.
+              Optional integer, defaults to 3</dd>
       </dl>
   </section>
 
