diff --git a/.gitignore b/.gitignore
index f6989ae..a3de142 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,6 +25,9 @@ hs_err_pid*
*.ipr
*.iml
venv
+.project
+.factorypath
+.classpath
## Plugin-specific files:
@@ -90,3 +93,9 @@ out.*
*/creds.sh
.run
build*
+
+# Agents
+.pi/
+.planning/
+.settings/
+config.json
diff --git a/memq-actor/pom.xml b/memq-actor/pom.xml
index 392ea0b..7f3e8ea 100644
--- a/memq-actor/pom.xml
+++ b/memq-actor/pom.xml
@@ -5,17 +5,13 @@
io.appform.memq
memq
- 0.1.8
+ 5.0.2-0-1
4.0.0
memq-actor
MemQ Core Actors Library
-
- 17
- 17
-
@@ -26,12 +22,15 @@
org.slf4j
slf4j-api
- ${slf4j-api.version}
com.google.guava
guava
- ${guava.version}
+ test
+
+
+ jakarta.validation
+ jakarta.validation-api
org.apache.commons
@@ -41,23 +40,18 @@
com.fasterxml.jackson.core
jackson-annotations
- 2.16.1
com.fasterxml.jackson.core
jackson-databind
- 2.16.1
io.dropwizard.metrics
metrics-core
- ${metrics-core.version}
-
ch.qos.logback
logback-classic
- 1.2.13
test
diff --git a/memq-actor/src/main/java/io/appform/memq/HighLevelActorConfig.java b/memq-actor/src/main/java/io/appform/memq/HighLevelActorConfig.java
index 496f227..406cbd9 100644
--- a/memq-actor/src/main/java/io/appform/memq/HighLevelActorConfig.java
+++ b/memq-actor/src/main/java/io/appform/memq/HighLevelActorConfig.java
@@ -4,13 +4,13 @@
import io.appform.memq.exceptionhandler.config.ExceptionHandlerConfig;
import io.appform.memq.retry.config.NoRetryConfig;
import io.appform.memq.retry.config.RetryConfig;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.Max;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotNull;
import lombok.*;
import lombok.extern.jackson.Jacksonized;
-import javax.validation.Valid;
-import javax.validation.constraints.Max;
-import javax.validation.constraints.Min;
-import javax.validation.constraints.NotNull;
@Value
@Builder
diff --git a/memq-actor/src/main/java/io/appform/memq/actor/Actor.java b/memq-actor/src/main/java/io/appform/memq/actor/Actor.java
index 5cb27e0..c257df8 100644
--- a/memq-actor/src/main/java/io/appform/memq/actor/Actor.java
+++ b/memq-actor/src/main/java/io/appform/memq/actor/Actor.java
@@ -1,6 +1,5 @@
package io.appform.memq.actor;
-import com.google.common.base.Preconditions;
import io.appform.memq.observer.ActorObserver;
import io.appform.memq.observer.ActorObserverContext;
import io.appform.memq.observer.ObserverMessageMeta;
@@ -64,9 +63,12 @@ public Actor(
// Switch ensures validation is performed for all dispatcher types.
// Adding a new DispatcherType will cause a compile error here if not handled.
switch (dispatcherType){
- case SYNC ->
- Preconditions.checkArgument( maxConcurrencyPerPartition == maxSizePerPartition,
- "Max Queue size and max concurrency has to be same for sync dispatcher");
+ case SYNC -> {
+ if (maxConcurrencyPerPartition != maxSizePerPartition) {
+ throw new IllegalArgumentException(
+ "Max Queue size and max concurrency has to be same for sync dispatcher");
+ }
+ }
case ASYNC_ISOLATED -> {
// No-op: ASYNC_ISOLATED dispatcher has no specific validation requirements
}
@@ -136,11 +138,11 @@ public final void close() {
}
void processWithObserver(final InternalMessage internalMessage) {
- val observerMessageMeta = new ObserverMessageMeta(internalMessage.getId(), internalMessage.getPublishedAt(),
- internalMessage.getValidTill());
+ val observerMessageMeta = new ObserverMessageMeta(internalMessage.id(), internalMessage.publishedAt(),
+ internalMessage.validTill());
this.rootObserver.execute(ActorObserverContext.builder()
.messageMeta(observerMessageMeta)
- .message(internalMessage.getMessage())
+ .message(internalMessage.message())
.operation(ActorOperation.CONSUME)
.actorName(this.name)
.build(),
@@ -160,12 +162,12 @@ Dispatcher getMessageDispatcher() {
}
private boolean process(final InternalMessage internalMessage) {
- val id = internalMessage.getId();
- val message = internalMessage.getMessage();
+ val id = internalMessage.id();
+ val message = internalMessage.message();
var status = false;
- var messageMeta = new MessageMeta(internalMessage.getPublishedAt(),
- internalMessage.getValidTill(),
- internalMessage.getHeaders());
+ var messageMeta = new MessageMeta(internalMessage.publishedAt(),
+ internalMessage.validTill(),
+ internalMessage.headers());
try {
val valid = this.rootObserver.execute(ActorObserverContext.builder()
.message(message)
@@ -177,23 +179,21 @@ private boolean process(final InternalMessage internalMessage) {
log.debug("Message validation failed for message: {}", message);
return false;
}
- else {
- status = this.retryer.execute(() -> {
- messageMeta.incrementAttempt();
- return this.consumerHandler.test(message, messageMeta);
- });
- if (!status) {
- log.debug("Consumer failed for message: {}", message);
- this.rootObserver.execute(ActorObserverContext.builder()
- .message(message)
- .operation(ActorOperation.SIDELINE)
- .actorName(this.name)
- .build(),
- () -> {
- this.sidelineHandler.accept(message, messageMeta);
- return true;
- });
- }
+ status = this.retryer.execute(() -> {
+ messageMeta.incrementAttempt();
+ return this.consumerHandler.test(message, messageMeta);
+ });
+ if (!status) {
+ log.debug("Consumer failed for message: {}", message);
+ this.rootObserver.execute(ActorObserverContext.builder()
+ .message(message)
+ .operation(ActorOperation.SIDELINE)
+ .actorName(this.name)
+ .build(),
+ () -> {
+ this.sidelineHandler.accept(message, messageMeta);
+ return true;
+ });
}
} catch (Exception e) {
log.error("Error processing message : " + id, e);
diff --git a/memq-actor/src/main/java/io/appform/memq/actor/AsyncIsolatedThreadpoolDispatcher.java b/memq-actor/src/main/java/io/appform/memq/actor/AsyncIsolatedThreadpoolDispatcher.java
index 8bee64c..c1195c0 100644
--- a/memq-actor/src/main/java/io/appform/memq/actor/AsyncIsolatedThreadpoolDispatcher.java
+++ b/memq-actor/src/main/java/io/appform/memq/actor/AsyncIsolatedThreadpoolDispatcher.java
@@ -27,9 +27,9 @@ public final void register(final Mailbox inMailbox) {
//Always executed inside mailbox lock
@Override
public final void deRegister(final Mailbox inMailbox) {
- if(registeredMailboxWorker.containsKey(inMailbox.getPartition())) {
- registeredMailboxWorker.get(inMailbox.getPartition()).close();
- registeredMailboxWorker.remove(inMailbox.getPartition());
+ val worker = registeredMailboxWorker.remove(inMailbox.getPartition());
+ if (worker != null) {
+ worker.close();
}
}
diff --git a/memq-actor/src/main/java/io/appform/memq/actor/Dispatcher.java b/memq-actor/src/main/java/io/appform/memq/actor/Dispatcher.java
index ba45b42..5158f66 100644
--- a/memq-actor/src/main/java/io/appform/memq/actor/Dispatcher.java
+++ b/memq-actor/src/main/java/io/appform/memq/actor/Dispatcher.java
@@ -1,12 +1,11 @@
package io.appform.memq.actor;
-import com.google.common.collect.Sets;
import lombok.val;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.Set;
-import java.util.stream.Collectors;
+import java.util.ArrayList;
+import java.util.List;
interface Dispatcher extends AutoCloseable {
@@ -20,14 +19,23 @@ interface Dispatcher extends AutoCloseable {
//Always executed inside mailbox lock
default void dispatch(final Mailbox mailbox) {
- //Find new messages
- val newInOrderedMessages = mailbox.getMessages().keySet()
- .stream()
- .limit(mailbox.getMaxConcurrency())
- .collect(Collectors.toSet());
- val newMessageIds = Set.copyOf(Sets.difference(newInOrderedMessages, mailbox.getInFlight()));
- if (newMessageIds.isEmpty()) {
- if(mailbox.getInFlight().size() == mailbox.getMaxConcurrency()) {
+ val inFlight = mailbox.getInFlight();
+ //Find new messages, respecting insertion order and max concurrency
+ int considered = 0;
+ List> newMessages = new ArrayList<>(mailbox.getMaxConcurrency());
+ for (val entry : mailbox.getMessages().entrySet()) {
+ if (considered >= mailbox.getMaxConcurrency()) {
+ break;
+ }
+ considered++;
+ val id = entry.getKey();
+ if (!inFlight.contains(id)) {
+ inFlight.add(id);
+ newMessages.add(entry.getValue());
+ }
+ }
+ if (newMessages.isEmpty()) {
+ if (inFlight.size() == mailbox.getMaxConcurrency()) {
log.warn("Reached max concurrency:{}. Ignoring consumption till inflight messages are consumed",
mailbox.getMaxConcurrency());
}
@@ -36,12 +44,12 @@ default void dispatch(final Mailbox mailbox) {
}
return;
}
- mailbox.getInFlight().addAll(newMessageIds);
- val messagesToBeDelivered = newMessageIds.stream()
- .map(mailbox.getMessages()::get)
- .toList();
- messagesToBeDelivered.forEach(internalMessage -> mailbox.getActor().getExecutorService().submit(() -> {
- val id = internalMessage.getId();
+ dispatchNew(mailbox, newMessages);
+ }
+
+ default void dispatchNew(final Mailbox mailbox, List> newMessages) {
+ List.copyOf(newMessages).forEach(internalMessage -> mailbox.getActor().getExecutorService().submit(() -> {
+ val id = internalMessage.id();
try {
mailbox.getActor().processWithObserver(internalMessage);
}
diff --git a/memq-actor/src/main/java/io/appform/memq/actor/InternalMessage.java b/memq-actor/src/main/java/io/appform/memq/actor/InternalMessage.java
index 19a506e..9132097 100644
--- a/memq-actor/src/main/java/io/appform/memq/actor/InternalMessage.java
+++ b/memq-actor/src/main/java/io/appform/memq/actor/InternalMessage.java
@@ -1,15 +1,11 @@
package io.appform.memq.actor;
-import lombok.Value;
-
import java.util.Map;
-
-@Value
-class InternalMessage {
- String id;
- long validTill;
- long publishedAt;
- Map headers;
- M message;
+record InternalMessage(
+ String id,
+ long validTill,
+ long publishedAt,
+ Map headers,
+ M message) {
}
diff --git a/memq-actor/src/main/java/io/appform/memq/actor/Mailbox.java b/memq-actor/src/main/java/io/appform/memq/actor/Mailbox.java
index 4a5b1b5..fb86421 100644
--- a/memq-actor/src/main/java/io/appform/memq/actor/Mailbox.java
+++ b/memq-actor/src/main/java/io/appform/memq/actor/Mailbox.java
@@ -88,7 +88,7 @@ public final boolean publish(final M message) {
}
val internalMessage = new InternalMessage<>(message.id(), message.validTill(),
System.currentTimeMillis(), message.headers(), message);
- messages.putIfAbsent(internalMessage.getId(), internalMessage);
+ messages.putIfAbsent(internalMessage.id(), internalMessage);
actor.getMessageDispatcher().triggerDispatch(this);
return true;
} finally {
diff --git a/memq-actor/src/main/java/io/appform/memq/actor/MessageMeta.java b/memq-actor/src/main/java/io/appform/memq/actor/MessageMeta.java
index 4fd6095..b54db65 100644
--- a/memq-actor/src/main/java/io/appform/memq/actor/MessageMeta.java
+++ b/memq-actor/src/main/java/io/appform/memq/actor/MessageMeta.java
@@ -9,7 +9,7 @@
@Getter
public class MessageMeta {
- private AtomicInteger deliveryAttempt;
+ private final AtomicInteger deliveryAttempt;
private final long publishedAt;
private final long validTill;
private final Map headers;
diff --git a/memq-actor/src/main/java/io/appform/memq/observer/ObserverMessageMeta.java b/memq-actor/src/main/java/io/appform/memq/observer/ObserverMessageMeta.java
index f0785ea..bd1f117 100644
--- a/memq-actor/src/main/java/io/appform/memq/observer/ObserverMessageMeta.java
+++ b/memq-actor/src/main/java/io/appform/memq/observer/ObserverMessageMeta.java
@@ -1,10 +1,4 @@
package io.appform.memq.observer;
-import lombok.Value;
-
-@Value
-public class ObserverMessageMeta {
- String id;
- long validTill;
- long publishedAt;
+public record ObserverMessageMeta(String id, long validTill, long publishedAt) {
}
diff --git a/memq-actor/src/main/java/io/appform/memq/retry/RetryStrategy.java b/memq-actor/src/main/java/io/appform/memq/retry/RetryStrategy.java
index 639478f..1b47442 100644
--- a/memq-actor/src/main/java/io/appform/memq/retry/RetryStrategy.java
+++ b/memq-actor/src/main/java/io/appform/memq/retry/RetryStrategy.java
@@ -8,7 +8,7 @@
public abstract class RetryStrategy {
- private RetryPolicy policy;
+ private final RetryPolicy policy;
protected RetryStrategy(RetryPolicy policy) {
this.policy = policy;
diff --git a/memq-actor/src/main/java/io/appform/memq/retry/RetryStrategyFactory.java b/memq-actor/src/main/java/io/appform/memq/retry/RetryStrategyFactory.java
index f4b22fb..8645f29 100644
--- a/memq-actor/src/main/java/io/appform/memq/retry/RetryStrategyFactory.java
+++ b/memq-actor/src/main/java/io/appform/memq/retry/RetryStrategyFactory.java
@@ -8,20 +8,14 @@
*/
public class RetryStrategyFactory {
public RetryStrategy create(RetryConfig config) {
- return switch (config.getType()) {
- case NO_RETRY -> new NoRetryStrategy((NoRetryConfig) config);
- case TIME_LIMITED_EXPONENTIAL_BACKOFF -> new TimeLimitedExponentialWaitRetryStrategy(
- (TimeLimitedExponentialWaitRetryConfig) config);
- case TIME_LIMITED_RANDOM_WAIT ->
- new TimeLimitedRandomWaitRetryStrategy((TimeLimitedRandomWaitRetryConfig) config);
- case TIME_LIMITED_FIXED_WAIT ->
- new TimeLimitedFixedWaitRetryStrategy((TimeLimitedFixedWaitRetryConfig) config);
- case COUNT_LIMITED_EXPONENTIAL_BACKOFF -> new CountLimitedExponentialWaitRetryStrategy(
- (CountLimitedExponentialWaitRetryConfig) config);
- case COUNT_LIMITED_RANDOM_WAIT ->
- new CountLimitedRandomWaitRetryStrategy((CountLimitedRandomWaitRetryConfig) config);
- case COUNT_LIMITED_FIXED_WAIT ->
- new CountLimitedFixedWaitRetryStrategy((CountLimitedFixedWaitRetryConfig) config);
+ return switch (config) {
+ case NoRetryConfig c -> new NoRetryStrategy(c);
+ case TimeLimitedExponentialWaitRetryConfig c -> new TimeLimitedExponentialWaitRetryStrategy(c);
+ case TimeLimitedRandomWaitRetryConfig c -> new TimeLimitedRandomWaitRetryStrategy(c);
+ case TimeLimitedFixedWaitRetryConfig c -> new TimeLimitedFixedWaitRetryStrategy(c);
+ case CountLimitedExponentialWaitRetryConfig c -> new CountLimitedExponentialWaitRetryStrategy(c);
+ case CountLimitedRandomWaitRetryConfig c -> new CountLimitedRandomWaitRetryStrategy(c);
+ case CountLimitedFixedWaitRetryConfig c -> new CountLimitedFixedWaitRetryStrategy(c);
};
}
}
diff --git a/memq-actor/src/main/java/io/appform/memq/retry/config/CountLimitedExponentialWaitRetryConfig.java b/memq-actor/src/main/java/io/appform/memq/retry/config/CountLimitedExponentialWaitRetryConfig.java
index 0d76f47..89e91a7 100644
--- a/memq-actor/src/main/java/io/appform/memq/retry/config/CountLimitedExponentialWaitRetryConfig.java
+++ b/memq-actor/src/main/java/io/appform/memq/retry/config/CountLimitedExponentialWaitRetryConfig.java
@@ -1,11 +1,11 @@
package io.appform.memq.retry.config;
import io.appform.memq.retry.RetryType;
+import jakarta.validation.constraints.DecimalMin;
+import jakarta.validation.constraints.Min;
import lombok.*;
import lombok.extern.jackson.Jacksonized;
-import javax.validation.constraints.DecimalMin;
-import javax.validation.constraints.Min;
import java.util.Set;
@Value
diff --git a/memq-actor/src/main/java/io/appform/memq/retry/config/CountLimitedFixedWaitRetryConfig.java b/memq-actor/src/main/java/io/appform/memq/retry/config/CountLimitedFixedWaitRetryConfig.java
index b57ae48..7071c2e 100644
--- a/memq-actor/src/main/java/io/appform/memq/retry/config/CountLimitedFixedWaitRetryConfig.java
+++ b/memq-actor/src/main/java/io/appform/memq/retry/config/CountLimitedFixedWaitRetryConfig.java
@@ -1,10 +1,10 @@
package io.appform.memq.retry.config;
import io.appform.memq.retry.RetryType;
+import jakarta.validation.constraints.Min;
import lombok.*;
import lombok.extern.jackson.Jacksonized;
-import javax.validation.constraints.Min;
import java.util.Set;
@Value
diff --git a/memq-actor/src/main/java/io/appform/memq/retry/config/CountLimitedRandomWaitRetryConfig.java b/memq-actor/src/main/java/io/appform/memq/retry/config/CountLimitedRandomWaitRetryConfig.java
index 2870626..66c2b88 100644
--- a/memq-actor/src/main/java/io/appform/memq/retry/config/CountLimitedRandomWaitRetryConfig.java
+++ b/memq-actor/src/main/java/io/appform/memq/retry/config/CountLimitedRandomWaitRetryConfig.java
@@ -1,10 +1,11 @@
package io.appform.memq.retry.config;
import io.appform.memq.retry.RetryType;
+import jakarta.validation.constraints.Min;
import lombok.*;
import lombok.extern.jackson.Jacksonized;
-import javax.validation.constraints.Min;
+
import java.util.Set;
@Value
diff --git a/memq-actor/src/main/java/io/appform/memq/retry/config/NoRetryConfig.java b/memq-actor/src/main/java/io/appform/memq/retry/config/NoRetryConfig.java
index ef028ab..a982fa6 100644
--- a/memq-actor/src/main/java/io/appform/memq/retry/config/NoRetryConfig.java
+++ b/memq-actor/src/main/java/io/appform/memq/retry/config/NoRetryConfig.java
@@ -9,7 +9,7 @@
*/
@Builder
@Jacksonized
-public class NoRetryConfig extends RetryConfig {
+public final class NoRetryConfig extends RetryConfig {
public NoRetryConfig() {
super(RetryType.NO_RETRY);
}
diff --git a/memq-actor/src/main/java/io/appform/memq/retry/config/RetryConfig.java b/memq-actor/src/main/java/io/appform/memq/retry/config/RetryConfig.java
index 9969e0f..87c9e33 100644
--- a/memq-actor/src/main/java/io/appform/memq/retry/config/RetryConfig.java
+++ b/memq-actor/src/main/java/io/appform/memq/retry/config/RetryConfig.java
@@ -23,7 +23,11 @@
@JsonSubTypes.Type(name = "TIME_LIMITED_FIXED_WAIT", value = TimeLimitedFixedWaitRetryConfig.class),
@JsonSubTypes.Type(name = "TIME_LIMITED_INCREMENTAL_WAIT", value = TimeLimitedRandomWaitRetryConfig.class)
})
-public abstract class RetryConfig {
+public sealed abstract class RetryConfig
+ permits CountLimitedExponentialWaitRetryConfig, CountLimitedFixedWaitRetryConfig,
+ CountLimitedRandomWaitRetryConfig, NoRetryConfig,
+ TimeLimitedExponentialWaitRetryConfig, TimeLimitedFixedWaitRetryConfig,
+ TimeLimitedRandomWaitRetryConfig {
private final RetryType type;
private Set retriableExceptions;
diff --git a/memq-actor/src/main/java/io/appform/memq/retry/config/TimeLimitedExponentialWaitRetryConfig.java b/memq-actor/src/main/java/io/appform/memq/retry/config/TimeLimitedExponentialWaitRetryConfig.java
index 5f31346..779cafd 100644
--- a/memq-actor/src/main/java/io/appform/memq/retry/config/TimeLimitedExponentialWaitRetryConfig.java
+++ b/memq-actor/src/main/java/io/appform/memq/retry/config/TimeLimitedExponentialWaitRetryConfig.java
@@ -1,11 +1,11 @@
package io.appform.memq.retry.config;
import io.appform.memq.retry.RetryType;
+import jakarta.validation.constraints.DecimalMin;
+import jakarta.validation.constraints.Min;
import lombok.*;
import lombok.extern.jackson.Jacksonized;
-import javax.validation.constraints.DecimalMin;
-import javax.validation.constraints.Min;
import java.util.Set;
@Value
diff --git a/memq-actor/src/main/java/io/appform/memq/retry/config/TimeLimitedFixedWaitRetryConfig.java b/memq-actor/src/main/java/io/appform/memq/retry/config/TimeLimitedFixedWaitRetryConfig.java
index 4fa2112..6408af1 100644
--- a/memq-actor/src/main/java/io/appform/memq/retry/config/TimeLimitedFixedWaitRetryConfig.java
+++ b/memq-actor/src/main/java/io/appform/memq/retry/config/TimeLimitedFixedWaitRetryConfig.java
@@ -1,10 +1,11 @@
package io.appform.memq.retry.config;
import io.appform.memq.retry.RetryType;
+import jakarta.validation.constraints.Min;
import lombok.*;
import lombok.extern.jackson.Jacksonized;
-import javax.validation.constraints.Min;
+
import java.util.Set;
@Value
diff --git a/memq-actor/src/main/java/io/appform/memq/retry/config/TimeLimitedRandomWaitRetryConfig.java b/memq-actor/src/main/java/io/appform/memq/retry/config/TimeLimitedRandomWaitRetryConfig.java
index b1dd67d..523d878 100644
--- a/memq-actor/src/main/java/io/appform/memq/retry/config/TimeLimitedRandomWaitRetryConfig.java
+++ b/memq-actor/src/main/java/io/appform/memq/retry/config/TimeLimitedRandomWaitRetryConfig.java
@@ -1,10 +1,10 @@
package io.appform.memq.retry.config;
import io.appform.memq.retry.RetryType;
+import jakarta.validation.constraints.Min;
import lombok.*;
import lombok.extern.jackson.Jacksonized;
-import javax.validation.constraints.Min;
import java.util.Set;
@Value
diff --git a/memq-actor/src/main/java/io/appform/memq/stats/ActorMetricObserver.java b/memq-actor/src/main/java/io/appform/memq/stats/ActorMetricObserver.java
index 21ad7fd..a155b92 100644
--- a/memq-actor/src/main/java/io/appform/memq/stats/ActorMetricObserver.java
+++ b/memq-actor/src/main/java/io/appform/memq/stats/ActorMetricObserver.java
@@ -66,20 +66,20 @@ public boolean execute(final ActorObserverContext extends Message> context, fi
private boolean metered(ActorObserverContext extends Message> context, BooleanSupplier supplier) {
val metricData = getMetricData(context);
- metricData.getTotal().mark();
- val timer = metricData.getTimer().time();
+ metricData.total().mark();
+ val timer = metricData.timer().time();
try {
val ret = proceed(context, supplier);
if(ret) {
- metricData.getSuccess().mark();
+ metricData.success().mark();
}
else {
- metricData.getFailed().mark();
+ metricData.failed().mark();
}
return ret;
}
catch (Throwable t) {
- metricData.getFailed().mark();
+ metricData.failed().mark();
throw t;
}
finally {
@@ -88,26 +88,22 @@ private boolean metered(ActorObserverContext extends Message> context, Boolean
}
private MetricData getMetricData(final ActorObserverContext extends Message> context) {
- val metricKeyData = MetricKeyData.builder()
- .actorName(actorName)
- .operation(context.getOperation().name())
- .build();
+ val metricKeyData = new MetricKeyData(actorName, context.getOperation().name());
return metricCache.computeIfAbsent(metricKeyData, key ->
getMetricData(getMetricPrefix(metricKeyData)));
}
private MetricData getMetricData(final String metricPrefix) {
- return MetricData.builder()
- .timer(metricRegistry.timer(MetricRegistry.name(metricPrefix, "latency"),
- () -> new Timer(new SlidingTimeWindowArrayReservoir(60, TimeUnit.SECONDS))))
- .success(metricRegistry.meter(MetricRegistry.name(metricPrefix, "success")))
- .failed(metricRegistry.meter(MetricRegistry.name(metricPrefix, "failed")))
- .total(metricRegistry.meter(MetricRegistry.name(metricPrefix, "total")))
- .build();
+ return new MetricData(
+ metricRegistry.meter(MetricRegistry.name(metricPrefix, "total")),
+ metricRegistry.meter(MetricRegistry.name(metricPrefix, "success")),
+ metricRegistry.meter(MetricRegistry.name(metricPrefix, "failed")),
+ metricRegistry.timer(MetricRegistry.name(metricPrefix, "latency"),
+ () -> new Timer(new SlidingTimeWindowArrayReservoir(60, TimeUnit.SECONDS))));
}
private String getMetricPrefix(final MetricKeyData metricKeyData) {
- return getMetricPrefix(actorName, metricKeyData.getOperation());
+ return getMetricPrefix(actorName, metricKeyData.operation());
}
private String getMetricPrefix(String... metricNames) {
@@ -117,4 +113,4 @@ private String getMetricPrefix(String... metricNames) {
}
return metricPrefix.toString();
}
-}
\ No newline at end of file
+}
diff --git a/memq-actor/src/main/java/io/appform/memq/stats/MetricData.java b/memq-actor/src/main/java/io/appform/memq/stats/MetricData.java
index 22a9256..79efda3 100644
--- a/memq-actor/src/main/java/io/appform/memq/stats/MetricData.java
+++ b/memq-actor/src/main/java/io/appform/memq/stats/MetricData.java
@@ -2,14 +2,6 @@
import com.codahale.metrics.Meter;
import com.codahale.metrics.Timer;
-import lombok.Builder;
-import lombok.Value;
-@Value
-@Builder
-public class MetricData {
- Meter total;
- Meter success;
- Meter failed;
- Timer timer;
+public record MetricData(Meter total, Meter success, Meter failed, Timer timer) {
}
diff --git a/memq-actor/src/main/java/io/appform/memq/stats/MetricKeyData.java b/memq-actor/src/main/java/io/appform/memq/stats/MetricKeyData.java
index 8bd3560..5d35020 100644
--- a/memq-actor/src/main/java/io/appform/memq/stats/MetricKeyData.java
+++ b/memq-actor/src/main/java/io/appform/memq/stats/MetricKeyData.java
@@ -1,11 +1,4 @@
package io.appform.memq.stats;
-import lombok.Builder;
-import lombok.Value;
-
-@Value
-@Builder
-public class MetricKeyData {
- String actorName;
- String operation;
+public record MetricKeyData(String actorName, String operation) {
}
diff --git a/memq-dw-bundle/pom.xml b/memq-dw-bundle/pom.xml
index cf66a82..4162b28 100644
--- a/memq-dw-bundle/pom.xml
+++ b/memq-dw-bundle/pom.xml
@@ -5,24 +5,32 @@
io.appform.memq
memq
- 0.1.8
+ 5.0.2-0-1
4.0.0
memq-dw-bundle
MemQ Actors Bundle for Dropwizard 2x
- 2.1.10-0-8
+ 5.0.2-0-1
- 2.1.10
+ 5.0.2
io.dropwizard
- dropwizard-dependencies
+ dropwizard-bom
+ pom
+ import
${dropwizard.version}
+
+
+
+ io.dropwizard
+ dropwizard-dependencies
pom
import
+ ${dropwizard.version}
diff --git a/memq-dw-bundle/src/main/java/io/appform/MemqActorBundle.java b/memq-dw-bundle/src/main/java/io/appform/MemqActorBundle.java
index d660ef4..52fe869 100644
--- a/memq-dw-bundle/src/main/java/io/appform/MemqActorBundle.java
+++ b/memq-dw-bundle/src/main/java/io/appform/MemqActorBundle.java
@@ -2,10 +2,10 @@
import io.appform.config.MemqConfig;
import io.appform.memq.observer.ActorObserver;
-import io.dropwizard.Configuration;
-import io.dropwizard.ConfiguredBundle;
-import io.dropwizard.setup.Bootstrap;
-import io.dropwizard.setup.Environment;
+import io.dropwizard.core.Configuration;
+import io.dropwizard.core.ConfiguredBundle;
+import io.dropwizard.core.setup.Bootstrap;
+import io.dropwizard.core.setup.Environment;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
diff --git a/memq-dw-bundle/src/main/java/io/appform/config/ExecutorConfig.java b/memq-dw-bundle/src/main/java/io/appform/config/ExecutorConfig.java
index 295584a..85a3b12 100644
--- a/memq-dw-bundle/src/main/java/io/appform/config/ExecutorConfig.java
+++ b/memq-dw-bundle/src/main/java/io/appform/config/ExecutorConfig.java
@@ -1,12 +1,13 @@
package io.appform.config;
-import lombok.*;
+import jakarta.validation.constraints.Max;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Builder;
+import lombok.Value;
import lombok.extern.jackson.Jacksonized;
-import javax.validation.constraints.Max;
-import javax.validation.constraints.Min;
-import javax.validation.constraints.NotEmpty;
-import javax.validation.constraints.NotNull;
@Value
@Builder
@@ -14,7 +15,7 @@
public class ExecutorConfig {
@NotNull
- @NotEmpty
+ @NotBlank
String name;
@Min(1)
diff --git a/memq-dw-bundle/src/main/java/io/appform/config/MemqConfig.java b/memq-dw-bundle/src/main/java/io/appform/config/MemqConfig.java
index db995c1..229919b 100644
--- a/memq-dw-bundle/src/main/java/io/appform/config/MemqConfig.java
+++ b/memq-dw-bundle/src/main/java/io/appform/config/MemqConfig.java
@@ -1,10 +1,9 @@
package io.appform.config;
+import jakarta.validation.Valid;
import lombok.Builder;
import lombok.Value;
import lombok.extern.jackson.Jacksonized;
-
-import javax.validation.Valid;
import java.util.List;
@Value
diff --git a/memq-dw-bundle/src/test/java/io/appform/MemqActorBundleTest.java b/memq-dw-bundle/src/test/java/io/appform/MemqActorBundleTest.java
index 91d4902..6874f84 100644
--- a/memq-dw-bundle/src/test/java/io/appform/MemqActorBundleTest.java
+++ b/memq-dw-bundle/src/test/java/io/appform/MemqActorBundleTest.java
@@ -3,16 +3,15 @@
import com.codahale.metrics.health.HealthCheckRegistry;
import io.appform.config.ExecutorConfig;
import io.appform.config.MemqConfig;
-import io.dropwizard.Configuration;
+import io.dropwizard.core.Configuration;
+import io.dropwizard.core.setup.AdminEnvironment;
+import io.dropwizard.core.setup.Bootstrap;
+import io.dropwizard.core.setup.Environment;
import io.dropwizard.jersey.DropwizardResourceConfig;
import io.dropwizard.jersey.setup.JerseyEnvironment;
import io.dropwizard.lifecycle.setup.LifecycleEnvironment;
-import io.dropwizard.setup.AdminEnvironment;
-import io.dropwizard.setup.Bootstrap;
-import io.dropwizard.setup.Environment;
import lombok.Getter;
import org.junit.jupiter.api.Test;
-import org.mockito.Mock;
import java.util.List;
import java.util.concurrent.Executors;
diff --git a/pom.xml b/pom.xml
index 0f3e487..1c3e1a6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
io.appform.memq
memq
pom
- 0.1.8
+ 5.0.2-0-1
MemQ Actors
https://github.com/appform-io/memq
In memory partitioned actor system
@@ -67,23 +67,14 @@
UTF-8
UTF-8
- 3.8.0
- 17
- 1.18.24
- 1.7.36
- 5.8.2
- 2.0.2
- 4.2.0
- 5.1.0
- 5.5.0
- 5.2.1
- 4.2.9
- 1.2.11
+ 3.16.0
+ 21
+ 5.0.2
+ 1.18.48
+ 5.13.4
+ 4.3.0
+ 5.23.0
2.4.4
- 1.9.9.1
- 5.8.2
- 4.4.0
- 2.33.2
false
appform-io
https://sonarcloud.io
@@ -94,16 +85,33 @@
${maven.multiModuleProjectDirectory}/report-aggregate/target/site/jacoco-aggregate/jacoco.xml
- 33.0.0-jre
- 3.12.0
+ 33.7.1-jre
+ 3.20.0
+ 3.2.8
+ 3.6.0
+ 1.5.1
+ 0.8.15
+ 3.3.1
+ 3.12.0
+ 1.7.0
- com.google.guava
- guava
- ${guava.version}
+ io.dropwizard
+ dropwizard-bom
+ pom
+ import
+ ${dropwizard.version}
+
+
+
+ io.dropwizard
+ dropwizard-dependencies
+ pom
+ import
+ ${dropwizard.version}
org.junit
@@ -112,20 +120,10 @@
pom
import
-
- org.hibernate.validator
- hibernate-validator
- 6.0.17.Final
-
-
- jakarta.validation
- jakarta.validation-api
- ${jakarta.validation.version}
-
org.projectlombok
lombok
@@ -163,24 +161,19 @@
maven-compiler-plugin
${maven.compiler.version}
- ${java.version}
- ${java.version}
+ ${java.version}
+ full
org.apache.maven.plugins
maven-surefire-plugin
- 3.2.5
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
- 3.3.1
+ ${maven-surefire-plugin.version}
me.fabriciorby
maven-surefire-junit5-tree-reporter
- 1.3.0
+ ${maven-surefire-junit5-tree-reporter.version}
@@ -204,7 +197,7 @@
org.jacoco
jacoco-maven-plugin
- 0.8.12
+ ${jacoco-maven-plugin.version}
@@ -228,7 +221,7 @@
org.apache.maven.plugins
maven-source-plugin
- 3.2.0
+ ${maven-source-plugin.version}
attach-sources
@@ -241,7 +234,7 @@
org.apache.maven.plugins
maven-javadoc-plugin
- 3.6.3
+ ${maven-javadoc-plugin.version}
all,-missing
@@ -257,7 +250,7 @@
org.sonatype.plugins
nexus-staging-maven-plugin
- 1.6.13
+ ${nexus-staging-maven-plugin.version}
true
ossrh
@@ -282,7 +275,7 @@
org.apache.maven.plugins
maven-gpg-plugin
- 1.6
+ ${maven-gpg-plugin.version}
sign-artifacts
diff --git a/report-aggregate-module/pom.xml b/report-aggregate-module/pom.xml
index 4b2176f..07f43b0 100644
--- a/report-aggregate-module/pom.xml
+++ b/report-aggregate-module/pom.xml
@@ -6,7 +6,7 @@
io.appform.memq
memq
- 0.1.8
+ 5.0.2-0-1
report-aggregate-module
@@ -29,7 +29,7 @@
${project.groupId}
memq-dw-bundle
- 2.1.10-0-8
+ 5.0.2-0-1