This is an automated email from the ASF dual-hosted git repository.

hqtran 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 5da8b6ea8f JAMES-3498 Make NamingStrategy an interface
5da8b6ea8f is described below

commit 5da8b6ea8f80a879bf6c7a605f51cbb168764a13
Author: Quan Tran <[email protected]>
AuthorDate: Mon Mar 30 13:47:57 2026 +0700

    JAMES-3498 Make NamingStrategy an interface
    
    Allow extensions to implement their own naming strategy (e.g. partitioned 
queues to better leverage RabbitMQ's CPU cores)
---
 ...ingStrategy.java => DefaultNamingStrategy.java} | 22 ++++------
 .../org/apache/james/events/NamingStrategy.java    | 48 +++++++---------------
 .../org/apache/james/events/NetworkErrorTest.java  |  4 +-
 ...RabbitMQEventBusDeadLetterQueueUpgradeTest.java |  2 +-
 .../apache/james/events/RabbitMQEventBusTest.java  |  6 +--
 .../RabbitMQEventBusUsingQuorumQueueTest.java      |  2 +-
 ...lboxEventBusDeadLetterQueueHealthCheckTest.java |  2 +-
 7 files changed, 30 insertions(+), 56 deletions(-)

diff --git 
a/event-bus/distributed/src/main/java/org/apache/james/events/NamingStrategy.java
 
b/event-bus/distributed/src/main/java/org/apache/james/events/DefaultNamingStrategy.java
similarity index 72%
copy from 
event-bus/distributed/src/main/java/org/apache/james/events/NamingStrategy.java
copy to 
event-bus/distributed/src/main/java/org/apache/james/events/DefaultNamingStrategy.java
index b0f03b4660..24499c646e 100644
--- 
a/event-bus/distributed/src/main/java/org/apache/james/events/NamingStrategy.java
+++ 
b/event-bus/distributed/src/main/java/org/apache/james/events/DefaultNamingStrategy.java
@@ -21,44 +21,38 @@ package org.apache.james.events;
 
 import reactor.rabbitmq.QueueSpecification;
 
-public class NamingStrategy {
-    public static final EventBusName JMAP_EVENT_BUS_NAME = new 
EventBusName("jmapEvent");
-    public static final EventBusName MAILBOX_EVENT_BUS_NAME = new 
EventBusName("mailboxEvent");
-    public static final EventBusName CONTENT_DELETION_EVENT_BUS_NAME = new 
EventBusName("contentDeletionEvent");
-    public static final NamingStrategy JMAP_NAMING_STRATEGY = new 
NamingStrategy(JMAP_EVENT_BUS_NAME);
-    public static final NamingStrategy MAILBOX_EVENT_NAMING_STRATEGY = new 
NamingStrategy(MAILBOX_EVENT_BUS_NAME);
-    public static final NamingStrategy CONTENT_DELETION_NAMING_STRATEGY = new 
NamingStrategy(CONTENT_DELETION_EVENT_BUS_NAME);
-
-    private final EventBusName eventBusName;
-
-    public NamingStrategy(EventBusName eventBusName) {
-        this.eventBusName = eventBusName;
-    }
-
+public record DefaultNamingStrategy(EventBusName eventBusName) implements 
NamingStrategy {
+    @Override
     public RegistrationQueueName queueName(EventBusId eventBusId) {
         return new RegistrationQueueName(eventBusName.value() + "-eventbus-" + 
eventBusId.asString());
     }
 
+    @Override
     public QueueSpecification deadLetterQueue() {
         return QueueSpecification.queue(eventBusName.value() + 
"-dead-letter-queue");
     }
 
+    @Override
     public String exchange() {
         return eventBusName.value() + "-exchange";
     }
 
+    @Override
     public String deadLetterExchange() {
         return eventBusName.value() + "-dead-letter-exchange";
     }
 
+    @Override
     public GroupConsumerRetry.RetryExchangeName retryExchange(Group group) {
         return new GroupConsumerRetry.RetryExchangeName(eventBusName.value(), 
group);
     }
 
+    @Override
     public GroupRegistration.WorkQueueName workQueue(Group group) {
         return new GroupRegistration.WorkQueueName(eventBusName.value(), 
group);
     }
 
+    @Override
     public EventBusName getEventBusName() {
         return eventBusName;
     }
diff --git 
a/event-bus/distributed/src/main/java/org/apache/james/events/NamingStrategy.java
 
b/event-bus/distributed/src/main/java/org/apache/james/events/NamingStrategy.java
index b0f03b4660..a22dc6aefd 100644
--- 
a/event-bus/distributed/src/main/java/org/apache/james/events/NamingStrategy.java
+++ 
b/event-bus/distributed/src/main/java/org/apache/james/events/NamingStrategy.java
@@ -21,45 +21,25 @@ package org.apache.james.events;
 
 import reactor.rabbitmq.QueueSpecification;
 
-public class NamingStrategy {
-    public static final EventBusName JMAP_EVENT_BUS_NAME = new 
EventBusName("jmapEvent");
-    public static final EventBusName MAILBOX_EVENT_BUS_NAME = new 
EventBusName("mailboxEvent");
-    public static final EventBusName CONTENT_DELETION_EVENT_BUS_NAME = new 
EventBusName("contentDeletionEvent");
-    public static final NamingStrategy JMAP_NAMING_STRATEGY = new 
NamingStrategy(JMAP_EVENT_BUS_NAME);
-    public static final NamingStrategy MAILBOX_EVENT_NAMING_STRATEGY = new 
NamingStrategy(MAILBOX_EVENT_BUS_NAME);
-    public static final NamingStrategy CONTENT_DELETION_NAMING_STRATEGY = new 
NamingStrategy(CONTENT_DELETION_EVENT_BUS_NAME);
+public interface NamingStrategy {
+    EventBusName JMAP_EVENT_BUS_NAME = new EventBusName("jmapEvent");
+    EventBusName MAILBOX_EVENT_BUS_NAME = new EventBusName("mailboxEvent");
+    EventBusName CONTENT_DELETION_EVENT_BUS_NAME = new 
EventBusName("contentDeletionEvent");
+    NamingStrategy JMAP_NAMING_STRATEGY = new 
DefaultNamingStrategy(JMAP_EVENT_BUS_NAME);
+    NamingStrategy MAILBOX_EVENT_NAMING_STRATEGY = new 
DefaultNamingStrategy(MAILBOX_EVENT_BUS_NAME);
+    NamingStrategy CONTENT_DELETION_NAMING_STRATEGY = new 
DefaultNamingStrategy(CONTENT_DELETION_EVENT_BUS_NAME);
 
-    private final EventBusName eventBusName;
+    RegistrationQueueName queueName(EventBusId eventBusId);
 
-    public NamingStrategy(EventBusName eventBusName) {
-        this.eventBusName = eventBusName;
-    }
+    QueueSpecification deadLetterQueue();
 
-    public RegistrationQueueName queueName(EventBusId eventBusId) {
-        return new RegistrationQueueName(eventBusName.value() + "-eventbus-" + 
eventBusId.asString());
-    }
+    String exchange();
 
-    public QueueSpecification deadLetterQueue() {
-        return QueueSpecification.queue(eventBusName.value() + 
"-dead-letter-queue");
-    }
+    String deadLetterExchange();
 
-    public String exchange() {
-        return eventBusName.value() + "-exchange";
-    }
+    GroupConsumerRetry.RetryExchangeName retryExchange(Group group);
 
-    public String deadLetterExchange() {
-        return eventBusName.value() + "-dead-letter-exchange";
-    }
+    GroupRegistration.WorkQueueName workQueue(Group group);
 
-    public GroupConsumerRetry.RetryExchangeName retryExchange(Group group) {
-        return new GroupConsumerRetry.RetryExchangeName(eventBusName.value(), 
group);
-    }
-
-    public GroupRegistration.WorkQueueName workQueue(Group group) {
-        return new GroupRegistration.WorkQueueName(eventBusName.value(), 
group);
-    }
-
-    public EventBusName getEventBusName() {
-        return eventBusName;
-    }
+    EventBusName getEventBusName();
 }
diff --git 
a/event-bus/distributed/src/test/java/org/apache/james/events/NetworkErrorTest.java
 
b/event-bus/distributed/src/test/java/org/apache/james/events/NetworkErrorTest.java
index 8ac0ad8ea4..975a09aaff 100644
--- 
a/event-bus/distributed/src/test/java/org/apache/james/events/NetworkErrorTest.java
+++ 
b/event-bus/distributed/src/test/java/org/apache/james/events/NetworkErrorTest.java
@@ -55,7 +55,7 @@ class NetworkErrorTest {
 
         RoutingKeyConverter routingKeyConverter = 
RoutingKeyConverter.forFactories(new 
EventBusTestFixture.TestRegistrationKeyFactory());
 
-        eventBus = new RabbitMQEventBus(new NamingStrategy(new 
EventBusName("test")), rabbitMQExtension.getSender(), 
rabbitMQExtension.getReceiverProvider(),
+        eventBus = new RabbitMQEventBus(new DefaultNamingStrategy(new 
EventBusName("test")), rabbitMQExtension.getSender(), 
rabbitMQExtension.getReceiverProvider(),
             new TestEventSerializer(), routingKeyConverter,
             eventDeadLetters, new RecordingMetricFactory(), 
rabbitMQExtension.getRabbitChannelPool(),
             EventBusId.random(), new 
RabbitMQEventBus.Configurations(rabbitMQExtension.getRabbitMQ().getConfiguration(),
 RETRY_BACKOFF_CONFIGURATION));
@@ -106,7 +106,7 @@ class NetworkErrorTest {
         RabbitMQConfiguration disablePropagateDispatchError = 
rabbitMQExtension.getRabbitMQ().getConfigurationBuilder()
             .eventBusPropagateDispatchError(false)
             .build();
-        eventBus = new RabbitMQEventBus(new NamingStrategy(new 
EventBusName("test")), rabbitMQExtension.getSender(), 
rabbitMQExtension.getReceiverProvider(),
+        eventBus = new RabbitMQEventBus(new DefaultNamingStrategy(new 
EventBusName("test")), rabbitMQExtension.getSender(), 
rabbitMQExtension.getReceiverProvider(),
             new TestEventSerializer(), RoutingKeyConverter.forFactories(new 
EventBusTestFixture.TestRegistrationKeyFactory()),
             eventDeadLetters, new RecordingMetricFactory(), 
rabbitMQExtension.getRabbitChannelPool(),
             EventBusId.random(), new 
RabbitMQEventBus.Configurations(disablePropagateDispatchError, 
RETRY_BACKOFF_CONFIGURATION));
diff --git 
a/event-bus/distributed/src/test/java/org/apache/james/events/RabbitMQEventBusDeadLetterQueueUpgradeTest.java
 
b/event-bus/distributed/src/test/java/org/apache/james/events/RabbitMQEventBusDeadLetterQueueUpgradeTest.java
index bfd35ddf3c..3dbf39efa4 100644
--- 
a/event-bus/distributed/src/test/java/org/apache/james/events/RabbitMQEventBusDeadLetterQueueUpgradeTest.java
+++ 
b/event-bus/distributed/src/test/java/org/apache/james/events/RabbitMQEventBusDeadLetterQueueUpgradeTest.java
@@ -42,7 +42,7 @@ import reactor.rabbitmq.QueueSpecification;
 
 class RabbitMQEventBusDeadLetterQueueUpgradeTest {
     private static final GroupA REGISTERED_GROUP = new GroupA();
-    public static final NamingStrategy NAMING_STRATEGY = new 
NamingStrategy(new EventBusName("test"));
+    public static final NamingStrategy NAMING_STRATEGY = new 
DefaultNamingStrategy(new EventBusName("test"));
     private static final WorkQueueName WORK_QUEUE_NAME = 
NAMING_STRATEGY.workQueue(REGISTERED_GROUP);
 
     @RegisterExtension
diff --git 
a/event-bus/distributed/src/test/java/org/apache/james/events/RabbitMQEventBusTest.java
 
b/event-bus/distributed/src/test/java/org/apache/james/events/RabbitMQEventBusTest.java
index 7c8786154c..e5addb75c6 100644
--- 
a/event-bus/distributed/src/test/java/org/apache/james/events/RabbitMQEventBusTest.java
+++ 
b/event-bus/distributed/src/test/java/org/apache/james/events/RabbitMQEventBusTest.java
@@ -97,7 +97,7 @@ class RabbitMQEventBusTest implements 
GroupContract.SingleEventBusGroupContract,
     ErrorHandlingContract {
     
     static EventBusName TEST_EVENT_BUS = new EventBusName("test");
-    static NamingStrategy TEST_NAMING_STRATEGY = new 
NamingStrategy(TEST_EVENT_BUS);
+    static NamingStrategy TEST_NAMING_STRATEGY = new 
DefaultNamingStrategy(TEST_EVENT_BUS);
     static DispatchingFailureGroup dispatchingFailureGroup = new 
DispatchingFailureGroup(TEST_EVENT_BUS);
 
     @RegisterExtension
@@ -189,7 +189,7 @@ class RabbitMQEventBusTest implements 
GroupContract.SingleEventBusGroupContract,
     @Test
     void groupQueuesNameShouldRemainUnchanged() {
         // to detect breaking change on Group queues name
-        assertThat(new NamingStrategy(new EventBusName("mailboxEvent"))
+        assertThat(new DefaultNamingStrategy(new EventBusName("mailboxEvent"))
             .workQueue(GroupRegistrationHandler.GROUP)
             .asString())
             
.isEqualTo("mailboxEvent-workQueue-org.apache.james.events.GroupRegistrationHandler$GroupRegistrationHandlerGroup");
@@ -837,7 +837,7 @@ class RabbitMQEventBusTest implements 
GroupContract.SingleEventBusGroupContract,
 
         @BeforeEach
         void beforeEach() throws Exception {
-            otherEventBus = newEventBus(new NamingStrategy(new 
EventBusName("other")), rabbitMQExtension.getSender(), 
rabbitMQExtension.getReceiverProvider());
+            otherEventBus = newEventBus(new DefaultNamingStrategy(new 
EventBusName("other")), rabbitMQExtension.getSender(), 
rabbitMQExtension.getReceiverProvider());
             otherEventBus.start();
         }
 
diff --git 
a/event-bus/distributed/src/test/java/org/apache/james/events/RabbitMQEventBusUsingQuorumQueueTest.java
 
b/event-bus/distributed/src/test/java/org/apache/james/events/RabbitMQEventBusUsingQuorumQueueTest.java
index 788ef1d739..c66d357d72 100644
--- 
a/event-bus/distributed/src/test/java/org/apache/james/events/RabbitMQEventBusUsingQuorumQueueTest.java
+++ 
b/event-bus/distributed/src/test/java/org/apache/james/events/RabbitMQEventBusUsingQuorumQueueTest.java
@@ -43,7 +43,7 @@ class RabbitMQEventBusUsingQuorumQueueTest implements 
GroupContract.SingleEventB
     ErrorHandlingContract {
     
     static EventBusName TEST_EVENT_BUS = new EventBusName("test-quorum");
-    static NamingStrategy TEST_NAMING_STRATEGY = new 
NamingStrategy(TEST_EVENT_BUS);
+    static NamingStrategy TEST_NAMING_STRATEGY = new 
DefaultNamingStrategy(TEST_EVENT_BUS);
 
     @RegisterExtension
     static RabbitMQExtension rabbitMQExtension = 
RabbitMQExtension.singletonRabbitMQ()
diff --git 
a/event-bus/distributed/src/test/java/org/apache/james/events/RabbitMQMailboxEventBusDeadLetterQueueHealthCheckTest.java
 
b/event-bus/distributed/src/test/java/org/apache/james/events/RabbitMQMailboxEventBusDeadLetterQueueHealthCheckTest.java
index b80c9edf3f..e33b8ba526 100644
--- 
a/event-bus/distributed/src/test/java/org/apache/james/events/RabbitMQMailboxEventBusDeadLetterQueueHealthCheckTest.java
+++ 
b/event-bus/distributed/src/test/java/org/apache/james/events/RabbitMQMailboxEventBusDeadLetterQueueHealthCheckTest.java
@@ -53,7 +53,7 @@ class RabbitMQMailboxEventBusDeadLetterQueueHealthCheckTest {
         .isolationPolicy(RabbitMQExtension.IsolationPolicy.STRONG);
 
     public static final ImmutableMap<String, Object> 
NO_QUEUE_DECLARE_ARGUMENTS = ImmutableMap.of();
-    public static final NamingStrategy MAILBOX_EVENTS_NAMING_STRATEGY = new 
NamingStrategy(new EventBusName("mailboxEvents"));
+    public static final NamingStrategy MAILBOX_EVENTS_NAMING_STRATEGY = new 
DefaultNamingStrategy(new EventBusName("mailboxEvents"));
     public static final String ROUTING_KEY_MAILBOX_EVENTS_EVENT_BUS = 
"mailboxEventsRoutingKey";
 
     private Connection connection;


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to