diff --git a/continew-starter-core/src/main/java/top/continew/starter/core/constant/PropertiesConstants.java b/continew-starter-core/src/main/java/top/continew/starter/core/constant/PropertiesConstants.java
index c99f5e1e..246e89d5 100644
--- a/continew-starter-core/src/main/java/top/continew/starter/core/constant/PropertiesConstants.java
+++ b/continew-starter-core/src/main/java/top/continew/starter/core/constant/PropertiesConstants.java
@@ -49,11 +49,6 @@ public class PropertiesConstants {
*/
public static final String SECURITY_CRYPTO = SECURITY + StringConstants.DOT + "crypto";
- /**
- * 限流器配置
- */
- public static final String SECURITY_LIMITER = SECURITY + StringConstants.DOT + "limiter";
-
/**
* 敏感词配置
*/
@@ -139,10 +134,15 @@ public class PropertiesConstants {
*/
public static final String TENANT = CONTINEW_STARTER + StringConstants.DOT + "tenant";
+ /**
+ * 限流配置
+ */
+ public static final String RATE_LIMITER = CONTINEW_STARTER + StringConstants.DOT + "rate-limiter";
+
/**
* 幂等配置
*/
- public static final String IDEMPOTENT = "idempotent";
+ public static final String IDEMPOTENT = CONTINEW_STARTER + StringConstants.DOT + "idempotent";
private PropertiesConstants() {
}
diff --git a/continew-starter-dependencies/pom.xml b/continew-starter-dependencies/pom.xml
index 7709e862..4459af92 100644
--- a/continew-starter-dependencies/pom.xml
+++ b/continew-starter-dependencies/pom.xml
@@ -538,6 +538,20 @@
${revision}
+
+
+ top.continew
+ continew-starter-idempotent
+ ${revision}
+
+
+
+
+ top.continew
+ continew-starter-ratelimiter
+ ${revision}
+
+
top.continew
@@ -566,6 +580,13 @@
${revision}
+
+
+ top.continew
+ continew-starter-security-sensitivewords
+ ${revision}
+
+
top.continew
@@ -587,20 +608,6 @@
${revision}
-
-
- top.continew
- continew-starter-security-limiter
- ${revision}
-
-
-
-
- top.continew
- continew-starter-security-sensitivewords
- ${revision}
-
-
top.continew
diff --git a/continew-starter-idempotent/src/main/java/top/continew/starter/idempotent/autoconfigure/IdempotentAutoConfiguration.java b/continew-starter-idempotent/src/main/java/top/continew/starter/idempotent/autoconfigure/IdempotentAutoConfiguration.java
index 401541f2..34abb9c1 100644
--- a/continew-starter-idempotent/src/main/java/top/continew/starter/idempotent/autoconfigure/IdempotentAutoConfiguration.java
+++ b/continew-starter-idempotent/src/main/java/top/continew/starter/idempotent/autoconfigure/IdempotentAutoConfiguration.java
@@ -26,6 +26,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.core.ResolvableType;
+import top.continew.starter.cache.redisson.autoconfigure.RedissonAutoConfiguration;
import top.continew.starter.core.constant.PropertiesConstants;
import top.continew.starter.idempotent.aop.IdempotentAspect;
import top.continew.starter.idempotent.generator.IdempotentNameGenerator;
@@ -37,7 +38,7 @@ import top.continew.starter.idempotent.generator.IdempotentNameGenerator;
* @author Charles7c
* @since 2.10.0
*/
-@AutoConfiguration
+@AutoConfiguration(after = RedissonAutoConfiguration.class)
@EnableConfigurationProperties(IdempotentProperties.class)
@ConditionalOnProperty(prefix = PropertiesConstants.IDEMPOTENT, name = PropertiesConstants.ENABLED, havingValue = "true", matchIfMissing = true)
public class IdempotentAutoConfiguration {
diff --git a/continew-starter-idempotent/src/main/resources/spel-extension.json b/continew-starter-idempotent/src/main/resources/spel-extension.json
new file mode 100644
index 00000000..8733c035
--- /dev/null
+++ b/continew-starter-idempotent/src/main/resources/spel-extension.json
@@ -0,0 +1,7 @@
+{
+ "top.continew.starter.idempotent.annotation.Idempotent@key":{
+ "method":{
+ "parameters": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/continew-starter-security/continew-starter-security-limiter/pom.xml b/continew-starter-ratelimiter/pom.xml
similarity index 68%
rename from continew-starter-security/continew-starter-security-limiter/pom.xml
rename to continew-starter-ratelimiter/pom.xml
index 173f2028..308aa438 100644
--- a/continew-starter-security/continew-starter-security-limiter/pom.xml
+++ b/continew-starter-ratelimiter/pom.xml
@@ -3,19 +3,14 @@
4.0.0
top.continew
- continew-starter-security
+ continew-starter
${revision}
- continew-starter-security-limiter
- ContiNew Starter 安全模块 - 限流
+ continew-starter-ratelimiter
+ ContiNew Starter 限流模块
-
- org.springframework.boot
- spring-boot-starter-aop
-
-
top.continew
diff --git a/continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/annotation/RateLimiter.java b/continew-starter-ratelimiter/src/main/java/top/continew/starter/ratelimiter/annotation/RateLimiter.java
similarity index 92%
rename from continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/annotation/RateLimiter.java
rename to continew-starter-ratelimiter/src/main/java/top/continew/starter/ratelimiter/annotation/RateLimiter.java
index 9cfd9bab..4a262bc0 100644
--- a/continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/annotation/RateLimiter.java
+++ b/continew-starter-ratelimiter/src/main/java/top/continew/starter/ratelimiter/annotation/RateLimiter.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package top.continew.starter.security.limiter.annotation;
+package top.continew.starter.ratelimiter.annotation;
-import top.continew.starter.security.limiter.enums.LimitType;
+import top.continew.starter.ratelimiter.enums.LimitType;
import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;
diff --git a/continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/annotation/RateLimiters.java b/continew-starter-ratelimiter/src/main/java/top/continew/starter/ratelimiter/annotation/RateLimiters.java
similarity index 93%
rename from continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/annotation/RateLimiters.java
rename to continew-starter-ratelimiter/src/main/java/top/continew/starter/ratelimiter/annotation/RateLimiters.java
index 73089046..9e19a746 100644
--- a/continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/annotation/RateLimiters.java
+++ b/continew-starter-ratelimiter/src/main/java/top/continew/starter/ratelimiter/annotation/RateLimiters.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package top.continew.starter.security.limiter.annotation;
+package top.continew.starter.ratelimiter.annotation;
import java.lang.annotation.*;
diff --git a/continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/core/RateLimiterAspect.java b/continew-starter-ratelimiter/src/main/java/top/continew/starter/ratelimiter/aop/RateLimiterAspect.java
similarity index 89%
rename from continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/core/RateLimiterAspect.java
rename to continew-starter-ratelimiter/src/main/java/top/continew/starter/ratelimiter/aop/RateLimiterAspect.java
index 8642d1e9..b41918df 100644
--- a/continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/core/RateLimiterAspect.java
+++ b/continew-starter-ratelimiter/src/main/java/top/continew/starter/ratelimiter/aop/RateLimiterAspect.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package top.continew.starter.security.limiter.core;
+package top.continew.starter.ratelimiter.aop;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.text.CharSequenceUtil;
@@ -27,15 +27,15 @@ import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.redisson.api.*;
-import org.springframework.stereotype.Component;
import top.continew.starter.cache.redisson.util.RedisUtils;
import top.continew.starter.core.constant.StringConstants;
import top.continew.starter.core.util.expression.ExpressionUtils;
-import top.continew.starter.security.limiter.annotation.RateLimiter;
-import top.continew.starter.security.limiter.annotation.RateLimiters;
-import top.continew.starter.security.limiter.autoconfigure.RateLimiterProperties;
-import top.continew.starter.security.limiter.enums.LimitType;
-import top.continew.starter.security.limiter.exception.RateLimiterException;
+import top.continew.starter.ratelimiter.annotation.RateLimiter;
+import top.continew.starter.ratelimiter.annotation.RateLimiters;
+import top.continew.starter.ratelimiter.autoconfigure.RateLimiterProperties;
+import top.continew.starter.ratelimiter.generator.RateLimiterNameGenerator;
+import top.continew.starter.ratelimiter.enums.LimitType;
+import top.continew.starter.ratelimiter.exception.RateLimiterException;
import top.continew.starter.web.util.SpringWebUtils;
import java.lang.reflect.Method;
@@ -51,7 +51,6 @@ import java.util.concurrent.ConcurrentHashMap;
* @since 2.2.0
*/
@Aspect
-@Component
public class RateLimiterAspect {
private static final ConcurrentHashMap RATE_LIMITER_CACHE = new ConcurrentHashMap<>();
@@ -70,14 +69,14 @@ public class RateLimiterAspect {
/**
* 单个限流注解切点
*/
- @Pointcut("@annotation(top.continew.starter.security.limiter.annotation.RateLimiter)")
+ @Pointcut("@annotation(top.continew.starter.ratelimiter.annotation.RateLimiter)")
public void rateLimiterPointCut() {
}
/**
* 多个限流注解切点
*/
- @Pointcut("@annotation(top.continew.starter.security.limiter.annotation.RateLimiters)")
+ @Pointcut("@annotation(top.continew.starter.ratelimiter.annotation.RateLimiters)")
public void rateLimitersPointCut() {
}
@@ -144,23 +143,23 @@ public class RateLimiterAspect {
}
/**
- * 获取限流缓存 Key
+ * 获取缓存 Key
*
* @param joinPoint 切点
* @param rateLimiter 限流注解
- * @return 限流缓存 Key
+ * @return 缓存 Key
*/
private String getCacheKey(JoinPoint joinPoint, RateLimiter rateLimiter) {
Object target = joinPoint.getTarget();
MethodSignature methodSignature = (MethodSignature)joinPoint.getSignature();
Method method = methodSignature.getMethod();
Object[] args = joinPoint.getArgs();
- // 获取限流名称
+ // 获取名称
String name = rateLimiter.name();
if (CharSequenceUtil.isBlank(name)) {
name = nameGenerator.generate(target, method, args);
}
- // 解析限流 Key
+ // 解析 Key
String key = rateLimiter.key();
if (CharSequenceUtil.isNotBlank(key)) {
Object eval = ExpressionUtils.eval(key, target, method, args);
diff --git a/continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/autoconfigure/RateLimiterAutoConfiguration.java b/continew-starter-ratelimiter/src/main/java/top/continew/starter/ratelimiter/autoconfigure/RateLimiterAutoConfiguration.java
similarity index 61%
rename from continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/autoconfigure/RateLimiterAutoConfiguration.java
rename to continew-starter-ratelimiter/src/main/java/top/continew/starter/ratelimiter/autoconfigure/RateLimiterAutoConfiguration.java
index 62cac119..7d4876e6 100644
--- a/continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/autoconfigure/RateLimiterAutoConfiguration.java
+++ b/continew-starter-ratelimiter/src/main/java/top/continew/starter/ratelimiter/autoconfigure/RateLimiterAutoConfiguration.java
@@ -14,9 +14,10 @@
* limitations under the License.
*/
-package top.continew.starter.security.limiter.autoconfigure;
+package top.continew.starter.ratelimiter.autoconfigure;
import jakarta.annotation.PostConstruct;
+import org.redisson.api.RedissonClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.AutoConfiguration;
@@ -24,10 +25,11 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ComponentScan;
+import top.continew.starter.cache.redisson.autoconfigure.RedissonAutoConfiguration;
import top.continew.starter.core.constant.PropertiesConstants;
-import top.continew.starter.security.limiter.core.DefaultRateLimiterNameGenerator;
-import top.continew.starter.security.limiter.core.RateLimiterNameGenerator;
+import top.continew.starter.ratelimiter.aop.RateLimiterAspect;
+import top.continew.starter.ratelimiter.generator.DefaultRateLimiterNameGenerator;
+import top.continew.starter.ratelimiter.generator.RateLimiterNameGenerator;
/**
* 限流器自动配置
@@ -36,14 +38,23 @@ import top.continew.starter.security.limiter.core.RateLimiterNameGenerator;
* @author Charles7c
* @since 2.2.0
*/
-@AutoConfiguration
+@AutoConfiguration(after = RedissonAutoConfiguration.class)
@EnableConfigurationProperties(RateLimiterProperties.class)
-@ComponentScan({"top.continew.starter.security.limiter.core"})
-@ConditionalOnProperty(prefix = PropertiesConstants.SECURITY_LIMITER, name = PropertiesConstants.ENABLED, havingValue = "true", matchIfMissing = true)
+@ConditionalOnProperty(prefix = PropertiesConstants.RATE_LIMITER, name = PropertiesConstants.ENABLED, havingValue = "true", matchIfMissing = true)
public class RateLimiterAutoConfiguration {
private static final Logger log = LoggerFactory.getLogger(RateLimiterAutoConfiguration.class);
+ /**
+ * 限流器切面
+ */
+ @Bean
+ public RateLimiterAspect rateLimiterAspect(RateLimiterProperties properties,
+ RateLimiterNameGenerator rateLimiterNameGenerator,
+ RedissonClient redissonClient) {
+ return new RateLimiterAspect(properties, rateLimiterNameGenerator, redissonClient);
+ }
+
/**
* 限流器名称生成器
*/
@@ -55,6 +66,6 @@ public class RateLimiterAutoConfiguration {
@PostConstruct
public void postConstruct() {
- log.debug("[ContiNew Starter] - Auto Configuration 'Security-RateLimiter' completed initialization.");
+ log.debug("[ContiNew Starter] - Auto Configuration 'RateLimiter' completed initialization.");
}
}
diff --git a/continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/autoconfigure/RateLimiterProperties.java b/continew-starter-ratelimiter/src/main/java/top/continew/starter/ratelimiter/autoconfigure/RateLimiterProperties.java
similarity index 90%
rename from continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/autoconfigure/RateLimiterProperties.java
rename to continew-starter-ratelimiter/src/main/java/top/continew/starter/ratelimiter/autoconfigure/RateLimiterProperties.java
index d423ba57..c0673b8b 100644
--- a/continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/autoconfigure/RateLimiterProperties.java
+++ b/continew-starter-ratelimiter/src/main/java/top/continew/starter/ratelimiter/autoconfigure/RateLimiterProperties.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package top.continew.starter.security.limiter.autoconfigure;
+package top.continew.starter.ratelimiter.autoconfigure;
import org.springframework.boot.context.properties.ConfigurationProperties;
import top.continew.starter.core.constant.PropertiesConstants;
@@ -25,7 +25,7 @@ import top.continew.starter.core.constant.PropertiesConstants;
* @author KAI
* @since 2.2.0
*/
-@ConfigurationProperties(PropertiesConstants.SECURITY_LIMITER)
+@ConfigurationProperties(PropertiesConstants.RATE_LIMITER)
public class RateLimiterProperties {
/**
diff --git a/continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/enums/LimitType.java b/continew-starter-ratelimiter/src/main/java/top/continew/starter/ratelimiter/enums/LimitType.java
similarity index 94%
rename from continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/enums/LimitType.java
rename to continew-starter-ratelimiter/src/main/java/top/continew/starter/ratelimiter/enums/LimitType.java
index d1221b46..06d4b729 100644
--- a/continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/enums/LimitType.java
+++ b/continew-starter-ratelimiter/src/main/java/top/continew/starter/ratelimiter/enums/LimitType.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package top.continew.starter.security.limiter.enums;
+package top.continew.starter.ratelimiter.enums;
/**
* 限流类型
diff --git a/continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/exception/RateLimiterException.java b/continew-starter-ratelimiter/src/main/java/top/continew/starter/ratelimiter/exception/RateLimiterException.java
similarity index 94%
rename from continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/exception/RateLimiterException.java
rename to continew-starter-ratelimiter/src/main/java/top/continew/starter/ratelimiter/exception/RateLimiterException.java
index 0b63459c..9881f954 100644
--- a/continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/exception/RateLimiterException.java
+++ b/continew-starter-ratelimiter/src/main/java/top/continew/starter/ratelimiter/exception/RateLimiterException.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package top.continew.starter.security.limiter.exception;
+package top.continew.starter.ratelimiter.exception;
import top.continew.starter.core.exception.BaseException;
diff --git a/continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/core/DefaultRateLimiterNameGenerator.java b/continew-starter-ratelimiter/src/main/java/top/continew/starter/ratelimiter/generator/DefaultRateLimiterNameGenerator.java
similarity index 98%
rename from continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/core/DefaultRateLimiterNameGenerator.java
rename to continew-starter-ratelimiter/src/main/java/top/continew/starter/ratelimiter/generator/DefaultRateLimiterNameGenerator.java
index 3ff7005f..3e81c240 100644
--- a/continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/core/DefaultRateLimiterNameGenerator.java
+++ b/continew-starter-ratelimiter/src/main/java/top/continew/starter/ratelimiter/generator/DefaultRateLimiterNameGenerator.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package top.continew.starter.security.limiter.core;
+package top.continew.starter.ratelimiter.generator;
import cn.hutool.core.util.ClassUtil;
import top.continew.starter.core.constant.StringConstants;
diff --git a/continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/core/RateLimiterNameGenerator.java b/continew-starter-ratelimiter/src/main/java/top/continew/starter/ratelimiter/generator/RateLimiterNameGenerator.java
similarity index 95%
rename from continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/core/RateLimiterNameGenerator.java
rename to continew-starter-ratelimiter/src/main/java/top/continew/starter/ratelimiter/generator/RateLimiterNameGenerator.java
index 78ddd6aa..9d93c0db 100644
--- a/continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/core/RateLimiterNameGenerator.java
+++ b/continew-starter-ratelimiter/src/main/java/top/continew/starter/ratelimiter/generator/RateLimiterNameGenerator.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package top.continew.starter.security.limiter.core;
+package top.continew.starter.ratelimiter.generator;
import java.lang.reflect.Method;
diff --git a/continew-starter-ratelimiter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/continew-starter-ratelimiter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
new file mode 100644
index 00000000..f2d677d0
--- /dev/null
+++ b/continew-starter-ratelimiter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -0,0 +1 @@
+top.continew.starter.ratelimiter.autoconfigure.RateLimiterAutoConfiguration
\ No newline at end of file
diff --git a/continew-starter-ratelimiter/src/main/resources/spel-extension.json b/continew-starter-ratelimiter/src/main/resources/spel-extension.json
new file mode 100644
index 00000000..7ab7aeaf
--- /dev/null
+++ b/continew-starter-ratelimiter/src/main/resources/spel-extension.json
@@ -0,0 +1,7 @@
+{
+ "top.continew.starter.ratelimiter.annotation.RateLimiter@key":{
+ "method":{
+ "parameters": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/continew-starter-security/continew-starter-security-limiter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/continew-starter-security/continew-starter-security-limiter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
deleted file mode 100644
index d365e008..00000000
--- a/continew-starter-security/continew-starter-security-limiter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ /dev/null
@@ -1 +0,0 @@
-top.continew.starter.security.limiter.autoconfigure.RateLimiterAutoConfiguration
\ No newline at end of file
diff --git a/continew-starter-security/continew-starter-security-limiter/src/main/resources/spel-extension.json b/continew-starter-security/continew-starter-security-limiter/src/main/resources/spel-extension.json
deleted file mode 100644
index 9088db73..00000000
--- a/continew-starter-security/continew-starter-security-limiter/src/main/resources/spel-extension.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "top.continew.starter.security.limiter.annotation.RateLimiter@key":{
- "method":{
- "parameters": true
- }
- }
-}
\ No newline at end of file
diff --git a/continew-starter-security/pom.xml b/continew-starter-security/pom.xml
index 66be5684..5030a14e 100644
--- a/continew-starter-security/pom.xml
+++ b/continew-starter-security/pom.xml
@@ -17,7 +17,6 @@
continew-starter-security-password
continew-starter-security-mask
continew-starter-security-crypto
- continew-starter-security-limiter
continew-starter-security-sensitivewords
diff --git a/pom.xml b/pom.xml
index bac5220c..2c74a528 100644
--- a/pom.xml
+++ b/pom.xml
@@ -71,8 +71,9 @@
continew-starter-data
continew-starter-auth
continew-starter-messaging
- continew-starter-extension
+ continew-starter-ratelimiter
continew-starter-idempotent
+ continew-starter-extension