This is an automated email from the ASF dual-hosted git repository.
btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
The following commit(s) were added to refs/heads/master by this push:
new e8aec7e00c [ENHANCEMENT] Apply RabbitMQ classic queue version 2 (#2243)
e8aec7e00c is described below
commit e8aec7e00c20605d46bb3bbe93087869d53b8b5d
Author: Trần Hồng Quân <[email protected]>
AuthorDate: Thu May 16 18:41:54 2024 +0700
[ENHANCEMENT] Apply RabbitMQ classic queue version 2 (#2243)
* [ENHANCEMENT] Apply classic queue version 2
Claimed to be better than version 1 cf:
-
https://www.rabbitmq.com/blog/2023/05/17/rabbitmq-3.12-performance-improvements#classic-queues-massively-improved-classic-queues-v2-cqv2
-
https://www.rabbitmq.com/blog/2023/05/17/rabbitmq-3.12-performance-improvements#312-cqv1-vs-cqv2
---
.../org/apache/james/backends/rabbitmq/QueueArguments.java | 5 +++++
.../james/backends/rabbitmq/RabbitMQConfiguration.java | 9 +++++++++
upgrade-instructions.md | 12 ++++++++++++
3 files changed, 26 insertions(+)
diff --git
a/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/QueueArguments.java
b/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/QueueArguments.java
index 3a441b7446..576ef41aba 100644
---
a/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/QueueArguments.java
+++
b/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/QueueArguments.java
@@ -70,6 +70,11 @@ public class QueueArguments {
return this;
}
+ public Builder classicQueueVersion(int version) {
+ arguments.put("x-queue-version", version);
+ return this;
+ }
+
public Builder put(String key, Object value) {
arguments.put(key, value);
return this;
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 150b7fd838..7c5071a44d 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
@@ -601,6 +601,7 @@ public class RabbitMQConfiguration {
private static final String URI_PROPERTY_NAME = "uri";
private static final String MANAGEMENT_URI_PROPERTY_NAME =
"management.uri";
+ private static final boolean FALLBACK_CLASSIC_QUEUES_VERSION_1 =
Boolean.parseBoolean(System.getProperty("fallback.classic.queues.v1", "false"));
public static RequireAmqpUri builder() {
return amqpUri -> managementUri -> managementCredentials -> new
Builder(amqpUri, managementUri, managementCredentials);
@@ -817,10 +818,18 @@ public class RabbitMQConfiguration {
if (useQuorumQueues) {
builder.quorumQueue().replicationFactor(quorumQueueReplicationFactor);
quorumQueueDeliveryLimit.ifPresent(builder::deliveryLimit);
+ } else {
+ applyClassicQueueArguments(builder);
}
return builder;
}
+ private void applyClassicQueueArguments(QueueArguments.Builder builder) {
+ if (!FALLBACK_CLASSIC_QUEUES_VERSION_1) {
+ builder.classicQueueVersion(2);
+ }
+ }
+
public boolean isQuorumQueuesUsed() {
return useQuorumQueues;
}
diff --git a/upgrade-instructions.md b/upgrade-instructions.md
index 59feaa8c3c..bbfb543f4b 100644
--- a/upgrade-instructions.md
+++ b/upgrade-instructions.md
@@ -30,6 +30,18 @@ Change list:
- [Java 21](#java-21)
- [javax -> jakarta](#javax---jakarta)
- [Make all queues on RabbitMQ quorum queue when
`quorum.queues.enable=true`](#make-all-queues-on-rabbitmq-quorum-queue-when-quorumqueuesenabletrue)
+ - [Migrate RabbitMQ classic queues to version
2](#migrate-rabbitmq-classic-queues-to-version-2)
+
+### Migrate RabbitMQ classic queues to version 2
+
+Date: 14/05/2024
+
+It is recommended by RabbitMQ to upgrade the classic queues to version 2 for
better performance:
https://www.rabbitmq.com/blog/2023/05/17/rabbitmq-3.12-performance-improvements#classic-queues-massively-improved-classic-queues-v2-cqv2.
+
+Existing version 1 classic queues would need to be deleted and let James
re-create them as version 2.
+
+Notice that to use classic queues version 2, you need at least RabbitMQ
3.10.0. If you want to stick with the older RabbitMQ
+versions and avoid this breaking change, you could set the JVM property
`fallback.classic.queues.v1` to `true` (defaults to `false`).
### Change cluster.enabled in redis.properties to redis.topology
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]