JAMES-3604 Fix issue when creating quorum rabbitmq queues
We can't create a quorum queue and mark it as auto-delete, RabbitMQ does not allow it. So we keep the jmap event bus notification queues as classic for now.
diff --git a/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/RabbitMQConfiguration.java b/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/RabbitMQConfiguration.java
index 48588d4..e98f142 100644
--- a/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/RabbitMQConfiguration.java
+++ b/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/RabbitMQConfiguration.java
@@ -722,9 +722,9 @@
return sslConfiguration;
}
- public QueueArguments.Builder workQueueArgumentsBuilder() {
+ public QueueArguments.Builder workQueueArgumentsBuilder(boolean autoDeleteQueue) {
QueueArguments.Builder builder = QueueArguments.builder();
- if (useQuorumQueues) {
+ if (!autoDeleteQueue && useQuorumQueues) {
builder.quorumQueue().replicationFactor(quorumQueueReplicationFactor);
}
queueTTL.ifPresent(builder::queueTTL);
diff --git a/event-bus/distributed/src/main/java/org/apache/james/events/GroupRegistration.java b/event-bus/distributed/src/main/java/org/apache/james/events/GroupRegistration.java
index bd1a9d3..794a60e 100644
--- a/event-bus/distributed/src/main/java/org/apache/james/events/GroupRegistration.java
+++ b/event-bus/distributed/src/main/java/org/apache/james/events/GroupRegistration.java
@@ -128,7 +128,7 @@
.durable(DURABLE)
.exclusive(!EXCLUSIVE)
.autoDelete(!AUTO_DELETE)
- .arguments(configuration.workQueueArgumentsBuilder()
+ .arguments(configuration.workQueueArgumentsBuilder(!AUTO_DELETE)
.deadLetter(namingStrategy.deadLetterExchange())
.build()));
}
diff --git a/event-bus/distributed/src/main/java/org/apache/james/events/GroupRegistrationHandler.java b/event-bus/distributed/src/main/java/org/apache/james/events/GroupRegistrationHandler.java
index def37aa..74c6ca0 100644
--- a/event-bus/distributed/src/main/java/org/apache/james/events/GroupRegistrationHandler.java
+++ b/event-bus/distributed/src/main/java/org/apache/james/events/GroupRegistrationHandler.java
@@ -104,7 +104,7 @@
.durable(DURABLE)
.exclusive(!EXCLUSIVE)
.autoDelete(!AUTO_DELETE)
- .arguments(configuration.workQueueArgumentsBuilder()
+ .arguments(configuration.workQueueArgumentsBuilder(!AUTO_DELETE)
.deadLetter(namingStrategy.deadLetterExchange())
.build()),
BindingSpecification.binding()
diff --git a/event-bus/distributed/src/main/java/org/apache/james/events/KeyReconnectionHandler.java b/event-bus/distributed/src/main/java/org/apache/james/events/KeyReconnectionHandler.java
index 95e6810..cd8b1f2 100644
--- a/event-bus/distributed/src/main/java/org/apache/james/events/KeyReconnectionHandler.java
+++ b/event-bus/distributed/src/main/java/org/apache/james/events/KeyReconnectionHandler.java
@@ -55,7 +55,7 @@
return Mono.fromRunnable(() -> {
try (Channel channel = connection.createChannel()) {
channel.queueDeclare(namingStrategy.queueName(eventBusId).asString(), DURABLE, !EXCLUSIVE, AUTO_DELETE,
- configuration.workQueueArgumentsBuilder().build());
+ configuration.workQueueArgumentsBuilder(AUTO_DELETE).build());
} catch (Exception e) {
LOGGER.error("Error recovering connection", e);
}
diff --git a/event-bus/distributed/src/main/java/org/apache/james/events/KeyRegistrationHandler.java b/event-bus/distributed/src/main/java/org/apache/james/events/KeyRegistrationHandler.java
index ae693fc..ae616bc 100644
--- a/event-bus/distributed/src/main/java/org/apache/james/events/KeyRegistrationHandler.java
+++ b/event-bus/distributed/src/main/java/org/apache/james/events/KeyRegistrationHandler.java
@@ -122,7 +122,7 @@
.durable(DURABLE)
.exclusive(!EXCLUSIVE)
.autoDelete(AUTO_DELETE)
- .arguments(configuration.workQueueArgumentsBuilder().build()))
+ .arguments(configuration.workQueueArgumentsBuilder(AUTO_DELETE).build()))
.timeout(TOPOLOGY_CHANGES_TIMEOUT)
.map(AMQP.Queue.DeclareOk::getQueue)
.retryWhen(Retry.backoff(retryBackoff.getMaxRetries(), retryBackoff.getFirstBackoff()).jitter(retryBackoff.getJitterFactor()))
diff --git a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueFactory.java b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueFactory.java
index ac8ae24..7a66cef 100644
--- a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueFactory.java
+++ b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueFactory.java
@@ -167,7 +167,7 @@
.durable(DURABLE)
.exclusive(!EXCLUSIVE)
.autoDelete(!AUTO_DELETE)
- .arguments(configuration.workQueueArgumentsBuilder()
+ .arguments(configuration.workQueueArgumentsBuilder(!AUTO_DELETE)
.deadLetter(mailQueueName.toDeadLetterExchangeName())
.build())),
sender.declareQueue(QueueSpecification.queue(mailQueueName.toDeadLetterQueueName())