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]