diff --git a/pom.xml b/pom.xml
index f7f68d6..0dcfa81 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,6 +12,7 @@
tashow-framework
tashow-module
tashow-gateway
+ tashow-feign
${project.artifactId}
diff --git a/tashow-dependencies/pom.xml b/tashow-dependencies/pom.xml
index 94a84aa..eae90aa 100644
--- a/tashow-dependencies/pom.xml
+++ b/tashow-dependencies/pom.xml
@@ -81,48 +81,6 @@
-
-
- cn.dev33
- sa-token-reactor-spring-boot3-starter
- 1.42.0
-
-
-
- cn.dev33
- sa-token-spring-boot3-starter
- 1.42.0
-
-
-
-
- cn.dev33
- sa-token-sso
- 1.42.0
-
-
-
-
- cn.dev33
- sa-token-oauth2
- 1.42.0
-
-
-
-
- cn.dev33
- sa-token-redis-jackson
- 1.42.0
-
-
-
- com.dtflys.forest
- forest-spring-boot-starter
- 1.5.26
-
-
-
-
io.netty
@@ -167,27 +125,22 @@
com.tashow.cloud
- tashow-module-system-api
+ tashow-system-api
${revision}
com.tashow.cloud
- tashow-module-system-biz
+ tashow-module-system
${revision}
com.tashow.cloud
- tashow-module-infra-api
+ tashow-infra-api
${revision}
com.tashow.cloud
- tashow-module-user-api
- ${revision}
-
-
- com.tashow.cloud
- tashow-module-infra-biz
+ tashow-module-infra
${revision}
diff --git a/tashow-feign/pom.xml b/tashow-feign/pom.xml
new file mode 100644
index 0000000..feb8d49
--- /dev/null
+++ b/tashow-feign/pom.xml
@@ -0,0 +1,18 @@
+
+ 4.0.0
+
+ com.tashow.cloud
+ tashow-platform
+ ${revision}
+
+
+ tashow-feign
+ pom
+
+
+ tashow-infra-api
+ tashow-system-api
+
+
+
diff --git a/tashow-module/tashow-module-infra/tashow-module-infra-api/pom.xml b/tashow-feign/tashow-infra-api/pom.xml
similarity index 93%
rename from tashow-module/tashow-module-infra/tashow-module-infra-api/pom.xml
rename to tashow-feign/tashow-infra-api/pom.xml
index 604aaef..02d7fb8 100644
--- a/tashow-module/tashow-module-infra/tashow-module-infra-api/pom.xml
+++ b/tashow-feign/tashow-infra-api/pom.xml
@@ -5,10 +5,10 @@
4.0.0
com.tashow.cloud
- tashow-module-infra
+ tashow-feign
${revision}
- tashow-module-infra-api
+ tashow-infra-api
jar
${project.artifactId}
diff --git a/tashow-module/tashow-module-infra/tashow-module-infra-api/src/main/java/com/tashow/cloud/infraapi/api/config/ConfigApi.java b/tashow-feign/tashow-infra-api/src/main/java/com/tashow/cloud/infraapi/api/config/ConfigApi.java
similarity index 100%
rename from tashow-module/tashow-module-infra/tashow-module-infra-api/src/main/java/com/tashow/cloud/infraapi/api/config/ConfigApi.java
rename to tashow-feign/tashow-infra-api/src/main/java/com/tashow/cloud/infraapi/api/config/ConfigApi.java
diff --git a/tashow-module/tashow-module-infra/tashow-module-infra-api/src/main/java/com/tashow/cloud/infraapi/api/file/FileApi.java b/tashow-feign/tashow-infra-api/src/main/java/com/tashow/cloud/infraapi/api/file/FileApi.java
similarity index 100%
rename from tashow-module/tashow-module-infra/tashow-module-infra-api/src/main/java/com/tashow/cloud/infraapi/api/file/FileApi.java
rename to tashow-feign/tashow-infra-api/src/main/java/com/tashow/cloud/infraapi/api/file/FileApi.java
diff --git a/tashow-module/tashow-module-infra/tashow-module-infra-api/src/main/java/com/tashow/cloud/infraapi/api/file/dto/FileCreateReqDTO.java b/tashow-feign/tashow-infra-api/src/main/java/com/tashow/cloud/infraapi/api/file/dto/FileCreateReqDTO.java
similarity index 100%
rename from tashow-module/tashow-module-infra/tashow-module-infra-api/src/main/java/com/tashow/cloud/infraapi/api/file/dto/FileCreateReqDTO.java
rename to tashow-feign/tashow-infra-api/src/main/java/com/tashow/cloud/infraapi/api/file/dto/FileCreateReqDTO.java
diff --git a/tashow-module/tashow-module-infra/tashow-module-infra-api/src/main/java/com/tashow/cloud/infraapi/api/logger/ApiAccessLogApi.java b/tashow-feign/tashow-infra-api/src/main/java/com/tashow/cloud/infraapi/api/logger/ApiAccessLogApi.java
similarity index 100%
rename from tashow-module/tashow-module-infra/tashow-module-infra-api/src/main/java/com/tashow/cloud/infraapi/api/logger/ApiAccessLogApi.java
rename to tashow-feign/tashow-infra-api/src/main/java/com/tashow/cloud/infraapi/api/logger/ApiAccessLogApi.java
diff --git a/tashow-module/tashow-module-infra/tashow-module-infra-api/src/main/java/com/tashow/cloud/infraapi/api/logger/ApiErrorLogApi.java b/tashow-feign/tashow-infra-api/src/main/java/com/tashow/cloud/infraapi/api/logger/ApiErrorLogApi.java
similarity index 100%
rename from tashow-module/tashow-module-infra/tashow-module-infra-api/src/main/java/com/tashow/cloud/infraapi/api/logger/ApiErrorLogApi.java
rename to tashow-feign/tashow-infra-api/src/main/java/com/tashow/cloud/infraapi/api/logger/ApiErrorLogApi.java
diff --git a/tashow-module/tashow-module-infra/tashow-module-infra-api/src/main/java/com/tashow/cloud/infraapi/api/logger/dto/ApiAccessLogCreateReqDTO.java b/tashow-feign/tashow-infra-api/src/main/java/com/tashow/cloud/infraapi/api/logger/dto/ApiAccessLogCreateReqDTO.java
similarity index 100%
rename from tashow-module/tashow-module-infra/tashow-module-infra-api/src/main/java/com/tashow/cloud/infraapi/api/logger/dto/ApiAccessLogCreateReqDTO.java
rename to tashow-feign/tashow-infra-api/src/main/java/com/tashow/cloud/infraapi/api/logger/dto/ApiAccessLogCreateReqDTO.java
diff --git a/tashow-module/tashow-module-infra/tashow-module-infra-api/src/main/java/com/tashow/cloud/infraapi/api/logger/dto/ApiErrorLogCreateReqDTO.java b/tashow-feign/tashow-infra-api/src/main/java/com/tashow/cloud/infraapi/api/logger/dto/ApiErrorLogCreateReqDTO.java
similarity index 100%
rename from tashow-module/tashow-module-infra/tashow-module-infra-api/src/main/java/com/tashow/cloud/infraapi/api/logger/dto/ApiErrorLogCreateReqDTO.java
rename to tashow-feign/tashow-infra-api/src/main/java/com/tashow/cloud/infraapi/api/logger/dto/ApiErrorLogCreateReqDTO.java
diff --git a/tashow-module/tashow-module-infra/tashow-module-infra-api/src/main/java/com/tashow/cloud/infraapi/api/package-info.java b/tashow-feign/tashow-infra-api/src/main/java/com/tashow/cloud/infraapi/api/package-info.java
similarity index 100%
rename from tashow-module/tashow-module-infra/tashow-module-infra-api/src/main/java/com/tashow/cloud/infraapi/api/package-info.java
rename to tashow-feign/tashow-infra-api/src/main/java/com/tashow/cloud/infraapi/api/package-info.java
diff --git a/tashow-module/tashow-module-infra/tashow-module-infra-api/src/main/java/com/tashow/cloud/infraapi/api/websocket/WebSocketSenderApi.java b/tashow-feign/tashow-infra-api/src/main/java/com/tashow/cloud/infraapi/api/websocket/WebSocketSenderApi.java
similarity index 100%
rename from tashow-module/tashow-module-infra/tashow-module-infra-api/src/main/java/com/tashow/cloud/infraapi/api/websocket/WebSocketSenderApi.java
rename to tashow-feign/tashow-infra-api/src/main/java/com/tashow/cloud/infraapi/api/websocket/WebSocketSenderApi.java
diff --git a/tashow-module/tashow-module-infra/tashow-module-infra-api/src/main/java/com/tashow/cloud/infraapi/api/websocket/dto/WebSocketSendReqDTO.java b/tashow-feign/tashow-infra-api/src/main/java/com/tashow/cloud/infraapi/api/websocket/dto/WebSocketSendReqDTO.java
similarity index 100%
rename from tashow-module/tashow-module-infra/tashow-module-infra-api/src/main/java/com/tashow/cloud/infraapi/api/websocket/dto/WebSocketSendReqDTO.java
rename to tashow-feign/tashow-infra-api/src/main/java/com/tashow/cloud/infraapi/api/websocket/dto/WebSocketSendReqDTO.java
diff --git a/tashow-module/tashow-module-infra/tashow-module-infra-api/src/main/java/com/tashow/cloud/infraapi/enums/ApiConstants.java b/tashow-feign/tashow-infra-api/src/main/java/com/tashow/cloud/infraapi/enums/ApiConstants.java
similarity index 100%
rename from tashow-module/tashow-module-infra/tashow-module-infra-api/src/main/java/com/tashow/cloud/infraapi/enums/ApiConstants.java
rename to tashow-feign/tashow-infra-api/src/main/java/com/tashow/cloud/infraapi/enums/ApiConstants.java
diff --git a/tashow-module/tashow-module-infra/tashow-module-infra-api/src/main/java/com/tashow/cloud/infraapi/enums/DictTypeConstants.java b/tashow-feign/tashow-infra-api/src/main/java/com/tashow/cloud/infraapi/enums/DictTypeConstants.java
similarity index 100%
rename from tashow-module/tashow-module-infra/tashow-module-infra-api/src/main/java/com/tashow/cloud/infraapi/enums/DictTypeConstants.java
rename to tashow-feign/tashow-infra-api/src/main/java/com/tashow/cloud/infraapi/enums/DictTypeConstants.java
diff --git a/tashow-module/tashow-module-infra/tashow-module-infra-api/src/main/java/com/tashow/cloud/infraapi/enums/ErrorCodeConstants.java b/tashow-feign/tashow-infra-api/src/main/java/com/tashow/cloud/infraapi/enums/ErrorCodeConstants.java
similarity index 100%
rename from tashow-module/tashow-module-infra/tashow-module-infra-api/src/main/java/com/tashow/cloud/infraapi/enums/ErrorCodeConstants.java
rename to tashow-feign/tashow-infra-api/src/main/java/com/tashow/cloud/infraapi/enums/ErrorCodeConstants.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/pom.xml b/tashow-feign/tashow-system-api/pom.xml
similarity index 93%
rename from tashow-module/tashow-module-system/tashow-module-system-api/pom.xml
rename to tashow-feign/tashow-system-api/pom.xml
index 1854e56..ef273af 100644
--- a/tashow-module/tashow-module-system/tashow-module-system-api/pom.xml
+++ b/tashow-feign/tashow-system-api/pom.xml
@@ -4,11 +4,11 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
com.tashow.cloud
- tashow-module-system
+ tashow-feign
${revision}
4.0.0
- tashow-module-system-api
+ tashow-system-api
jar
${project.artifactId}
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/dept/DeptApi.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/dept/DeptApi.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/dept/DeptApi.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/dept/DeptApi.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/dept/PostApi.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/dept/PostApi.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/dept/PostApi.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/dept/PostApi.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/dept/dto/DeptRespDTO.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/dept/dto/DeptRespDTO.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/dept/dto/DeptRespDTO.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/dept/dto/DeptRespDTO.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/dept/dto/PostRespDTO.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/dept/dto/PostRespDTO.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/dept/dto/PostRespDTO.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/dept/dto/PostRespDTO.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/dict/DictDataApi.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/dict/DictDataApi.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/dict/DictDataApi.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/dict/DictDataApi.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/dict/dto/DictDataRespDTO.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/dict/dto/DictDataRespDTO.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/dict/dto/DictDataRespDTO.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/dict/dto/DictDataRespDTO.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/logger/LoginLogApi.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/logger/LoginLogApi.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/logger/LoginLogApi.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/logger/LoginLogApi.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/logger/OperateLogApi.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/logger/OperateLogApi.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/logger/OperateLogApi.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/logger/OperateLogApi.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/logger/dto/LoginLogCreateReqDTO.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/logger/dto/LoginLogCreateReqDTO.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/logger/dto/LoginLogCreateReqDTO.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/logger/dto/LoginLogCreateReqDTO.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/logger/dto/OperateLogCreateReqDTO.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/logger/dto/OperateLogCreateReqDTO.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/logger/dto/OperateLogCreateReqDTO.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/logger/dto/OperateLogCreateReqDTO.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/logger/dto/OperateLogPageReqDTO.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/logger/dto/OperateLogPageReqDTO.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/logger/dto/OperateLogPageReqDTO.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/logger/dto/OperateLogPageReqDTO.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/logger/dto/OperateLogRespDTO.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/logger/dto/OperateLogRespDTO.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/logger/dto/OperateLogRespDTO.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/logger/dto/OperateLogRespDTO.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/mail/MailSendApi.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/mail/MailSendApi.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/mail/MailSendApi.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/mail/MailSendApi.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/mail/dto/MailSendSingleToUserReqDTO.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/mail/dto/MailSendSingleToUserReqDTO.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/mail/dto/MailSendSingleToUserReqDTO.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/mail/dto/MailSendSingleToUserReqDTO.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/notify/NotifyMessageSendApi.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/notify/NotifyMessageSendApi.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/notify/NotifyMessageSendApi.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/notify/NotifyMessageSendApi.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/notify/dto/NotifySendSingleToUserReqDTO.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/notify/dto/NotifySendSingleToUserReqDTO.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/notify/dto/NotifySendSingleToUserReqDTO.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/notify/dto/NotifySendSingleToUserReqDTO.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/oauth2/OAuth2TokenApi.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/oauth2/OAuth2TokenApi.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/oauth2/OAuth2TokenApi.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/oauth2/OAuth2TokenApi.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/oauth2/dto/OAuth2AccessTokenCheckRespDTO.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/oauth2/dto/OAuth2AccessTokenCheckRespDTO.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/oauth2/dto/OAuth2AccessTokenCheckRespDTO.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/oauth2/dto/OAuth2AccessTokenCheckRespDTO.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/oauth2/dto/OAuth2AccessTokenCreateReqDTO.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/oauth2/dto/OAuth2AccessTokenCreateReqDTO.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/oauth2/dto/OAuth2AccessTokenCreateReqDTO.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/oauth2/dto/OAuth2AccessTokenCreateReqDTO.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/oauth2/dto/OAuth2AccessTokenRespDTO.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/oauth2/dto/OAuth2AccessTokenRespDTO.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/oauth2/dto/OAuth2AccessTokenRespDTO.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/oauth2/dto/OAuth2AccessTokenRespDTO.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/package-info.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/package-info.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/package-info.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/package-info.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/permission/PermissionApi.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/permission/PermissionApi.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/permission/PermissionApi.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/permission/PermissionApi.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/permission/RoleApi.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/permission/RoleApi.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/permission/RoleApi.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/permission/RoleApi.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/permission/dto/DeptDataPermissionRespDTO.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/permission/dto/DeptDataPermissionRespDTO.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/permission/dto/DeptDataPermissionRespDTO.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/permission/dto/DeptDataPermissionRespDTO.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/sms/SmsCodeApi.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/sms/SmsCodeApi.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/sms/SmsCodeApi.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/sms/SmsCodeApi.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/sms/SmsSendApi.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/sms/SmsSendApi.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/sms/SmsSendApi.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/sms/SmsSendApi.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/sms/dto/code/SmsCodeSendReqDTO.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/sms/dto/code/SmsCodeSendReqDTO.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/sms/dto/code/SmsCodeSendReqDTO.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/sms/dto/code/SmsCodeSendReqDTO.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/sms/dto/code/SmsCodeUseReqDTO.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/sms/dto/code/SmsCodeUseReqDTO.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/sms/dto/code/SmsCodeUseReqDTO.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/sms/dto/code/SmsCodeUseReqDTO.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/sms/dto/code/SmsCodeValidateReqDTO.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/sms/dto/code/SmsCodeValidateReqDTO.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/sms/dto/code/SmsCodeValidateReqDTO.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/sms/dto/code/SmsCodeValidateReqDTO.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/sms/dto/send/SmsSendSingleToUserReqDTO.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/sms/dto/send/SmsSendSingleToUserReqDTO.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/sms/dto/send/SmsSendSingleToUserReqDTO.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/sms/dto/send/SmsSendSingleToUserReqDTO.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/SocialClientApi.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/SocialClientApi.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/SocialClientApi.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/SocialClientApi.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/SocialUserApi.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/SocialUserApi.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/SocialUserApi.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/SocialUserApi.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialUserBindReqDTO.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialUserBindReqDTO.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialUserBindReqDTO.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialUserBindReqDTO.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialUserRespDTO.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialUserRespDTO.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialUserRespDTO.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialUserRespDTO.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialUserUnbindReqDTO.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialUserUnbindReqDTO.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialUserUnbindReqDTO.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialUserUnbindReqDTO.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialWxJsapiSignatureRespDTO.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialWxJsapiSignatureRespDTO.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialWxJsapiSignatureRespDTO.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialWxJsapiSignatureRespDTO.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialWxPhoneNumberInfoRespDTO.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialWxPhoneNumberInfoRespDTO.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialWxPhoneNumberInfoRespDTO.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialWxPhoneNumberInfoRespDTO.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialWxQrcodeReqDTO.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialWxQrcodeReqDTO.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialWxQrcodeReqDTO.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialWxQrcodeReqDTO.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialWxaSubscribeMessageSendReqDTO.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialWxaSubscribeMessageSendReqDTO.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialWxaSubscribeMessageSendReqDTO.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialWxaSubscribeMessageSendReqDTO.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialWxaSubscribeTemplateRespDTO.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialWxaSubscribeTemplateRespDTO.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialWxaSubscribeTemplateRespDTO.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/social/dto/SocialWxaSubscribeTemplateRespDTO.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/tenant/TenantApi.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/tenant/TenantApi.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/tenant/TenantApi.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/tenant/TenantApi.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/user/AdminUserApi.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/user/AdminUserApi.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/user/AdminUserApi.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/user/AdminUserApi.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/user/dto/AdminUserRespDTO.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/user/dto/AdminUserRespDTO.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/api/user/dto/AdminUserRespDTO.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/api/user/dto/AdminUserRespDTO.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/ApiConstants.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/ApiConstants.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/ApiConstants.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/ApiConstants.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/DictTypeConstants.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/DictTypeConstants.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/DictTypeConstants.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/DictTypeConstants.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/ErrorCodeConstants.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/ErrorCodeConstants.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/ErrorCodeConstants.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/ErrorCodeConstants.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/LogRecordConstants.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/LogRecordConstants.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/LogRecordConstants.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/LogRecordConstants.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/common/SexEnum.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/common/SexEnum.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/common/SexEnum.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/common/SexEnum.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/logger/LoginLogTypeEnum.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/logger/LoginLogTypeEnum.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/logger/LoginLogTypeEnum.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/logger/LoginLogTypeEnum.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/logger/LoginResultEnum.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/logger/LoginResultEnum.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/logger/LoginResultEnum.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/logger/LoginResultEnum.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/mail/MailSendStatusEnum.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/mail/MailSendStatusEnum.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/mail/MailSendStatusEnum.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/mail/MailSendStatusEnum.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/notice/NoticeTypeEnum.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/notice/NoticeTypeEnum.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/notice/NoticeTypeEnum.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/notice/NoticeTypeEnum.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/notify/NotifyTemplateTypeEnum.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/notify/NotifyTemplateTypeEnum.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/notify/NotifyTemplateTypeEnum.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/notify/NotifyTemplateTypeEnum.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/oauth2/OAuth2ClientConstants.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/oauth2/OAuth2ClientConstants.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/oauth2/OAuth2ClientConstants.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/oauth2/OAuth2ClientConstants.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/oauth2/OAuth2GrantTypeEnum.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/oauth2/OAuth2GrantTypeEnum.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/oauth2/OAuth2GrantTypeEnum.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/oauth2/OAuth2GrantTypeEnum.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/permission/DataScopeEnum.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/permission/DataScopeEnum.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/permission/DataScopeEnum.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/permission/DataScopeEnum.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/permission/MenuTypeEnum.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/permission/MenuTypeEnum.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/permission/MenuTypeEnum.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/permission/MenuTypeEnum.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/permission/RoleCodeEnum.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/permission/RoleCodeEnum.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/permission/RoleCodeEnum.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/permission/RoleCodeEnum.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/permission/RoleTypeEnum.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/permission/RoleTypeEnum.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/permission/RoleTypeEnum.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/permission/RoleTypeEnum.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/sms/SmsReceiveStatusEnum.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/sms/SmsReceiveStatusEnum.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/sms/SmsReceiveStatusEnum.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/sms/SmsReceiveStatusEnum.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/sms/SmsSceneEnum.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/sms/SmsSceneEnum.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/sms/SmsSceneEnum.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/sms/SmsSceneEnum.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/sms/SmsSendStatusEnum.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/sms/SmsSendStatusEnum.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/sms/SmsSendStatusEnum.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/sms/SmsSendStatusEnum.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/sms/SmsTemplateTypeEnum.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/sms/SmsTemplateTypeEnum.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/sms/SmsTemplateTypeEnum.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/sms/SmsTemplateTypeEnum.java
diff --git a/tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/social/SocialTypeEnum.java b/tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/social/SocialTypeEnum.java
similarity index 100%
rename from tashow-module/tashow-module-system/tashow-module-system-api/src/main/java/com/tashow/cloud/systemapi/enums/social/SocialTypeEnum.java
rename to tashow-feign/tashow-system-api/src/main/java/com/tashow/cloud/systemapi/enums/social/SocialTypeEnum.java
diff --git a/tashow-framework/pom.xml b/tashow-framework/pom.xml
index d28e9d9..0e47e10 100644
--- a/tashow-framework/pom.xml
+++ b/tashow-framework/pom.xml
@@ -26,6 +26,7 @@
tashow-data-mybatis
tashow-data-redis
tashow-data-excel
+ tashow-data-es
diff --git a/tashow-framework/tashow-data-es/pom.xml b/tashow-framework/tashow-data-es/pom.xml
new file mode 100644
index 0000000..5cb06d8
--- /dev/null
+++ b/tashow-framework/tashow-data-es/pom.xml
@@ -0,0 +1,41 @@
+
+
+ 4.0.0
+
+ com.tashow.cloud
+ tashow-framework
+ ${revision}
+
+ tashow-data-es
+ jar
+
+ ${project.artifactId}
+ es 封装拓展
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-elasticsearch
+
+
+ javax.annotation
+ javax.annotation-api
+ 1.3.2
+
+
+
+ com.tashow.cloud
+ tashow-common
+
+
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+
diff --git a/tashow-framework/tashow-data-es/src/main/java/com/tashow/cloud/es/config/ElasticsearchAutoConfiguration.java b/tashow-framework/tashow-data-es/src/main/java/com/tashow/cloud/es/config/ElasticsearchAutoConfiguration.java
new file mode 100644
index 0000000..992e232
--- /dev/null
+++ b/tashow-framework/tashow-data-es/src/main/java/com/tashow/cloud/es/config/ElasticsearchAutoConfiguration.java
@@ -0,0 +1,61 @@
+package com.tashow.cloud.es.config;
+
+import co.elastic.clients.elasticsearch.ElasticsearchClient;
+import co.elastic.clients.json.jackson.JacksonJsonpMapper;
+import co.elastic.clients.transport.ElasticsearchTransport;
+import co.elastic.clients.transport.rest_client.RestClientTransport;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.HttpHost;
+import org.elasticsearch.client.RestClient;
+import org.springframework.boot.autoconfigure.AutoConfiguration;
+import org.springframework.context.annotation.Bean;
+
+import javax.annotation.PreDestroy;
+
+@Slf4j
+@AutoConfiguration
+public class ElasticsearchAutoConfiguration {
+
+ private RestClient restClient;
+
+ @Bean
+ public ElasticsearchClient elasticsearchClient(ElasticsearchProperties properties) {
+ // 1. 构建 HTTP 主机数组
+ HttpHost[] hosts = properties.getUris().stream()
+ .map(uri -> {
+ if (!uri.startsWith("http")) {
+ throw new IllegalArgumentException("URI 必须包含协议 (http/https)");
+ }
+ return HttpHost.create(uri);
+ })
+ .toArray(HttpHost[]::new);
+
+ // 2. 创建低级 REST 客户端 (无认证)
+ this.restClient = RestClient.builder(hosts)
+ .setRequestConfigCallback(requestConfigBuilder -> requestConfigBuilder
+ .setConnectTimeout(properties.getConnectTimeout())
+ .setSocketTimeout(properties.getSocketTimeout()))
+ .build();
+
+ // 3. 创建 Transport 层
+ ElasticsearchTransport transport = new RestClientTransport(
+ restClient,
+ new JacksonJsonpMapper() // 使用 Jackson 处理 JSON
+ );
+
+ log.info("[Elasticsearch] 客户端初始化完成,节点: {}", properties.getUris());
+ return new ElasticsearchClient(transport);
+ }
+
+ @PreDestroy
+ public void destroy() {
+ if (restClient != null) {
+ try {
+ restClient.close();
+ log.info("[Elasticsearch] 客户端已关闭");
+ } catch (Exception e) {
+ log.error("[Elasticsearch] 客户端关闭异常", e);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tashow-framework/tashow-data-es/src/main/java/com/tashow/cloud/es/config/ElasticsearchConfig.java b/tashow-framework/tashow-data-es/src/main/java/com/tashow/cloud/es/config/ElasticsearchConfig.java
new file mode 100644
index 0000000..6e3979f
--- /dev/null
+++ b/tashow-framework/tashow-data-es/src/main/java/com/tashow/cloud/es/config/ElasticsearchConfig.java
@@ -0,0 +1,31 @@
+/*
+package com.tashow.cloud.es.config;
+
+import co.elastic.clients.elasticsearch.ElasticsearchClient;
+import co.elastic.clients.json.jackson.JacksonJsonpMapper;
+import co.elastic.clients.transport.ElasticsearchTransport;
+import co.elastic.clients.transport.rest_client.RestClientTransport;
+import org.apache.http.HttpHost;
+import org.elasticsearch.client.RestClient;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class ElasticsearchConfig {
+
+ @Bean
+ public ElasticsearchClient elasticsearchClient() {
+ // 创建低级客户端
+ RestClient restClient = RestClient.builder(
+ new HttpHost("43.139.42.137", 9200)
+ ).build();
+
+ // 使用 Jackson 映射器创建传输层
+ ElasticsearchTransport transport = new RestClientTransport(
+ restClient, new JacksonJsonpMapper()
+ );
+
+ // 创建高级客户端
+ return new ElasticsearchClient(transport);
+ }
+}*/
diff --git a/tashow-framework/tashow-data-es/src/main/java/com/tashow/cloud/es/config/ElasticsearchConfigTest.java b/tashow-framework/tashow-data-es/src/main/java/com/tashow/cloud/es/config/ElasticsearchConfigTest.java
new file mode 100644
index 0000000..debaab0
--- /dev/null
+++ b/tashow-framework/tashow-data-es/src/main/java/com/tashow/cloud/es/config/ElasticsearchConfigTest.java
@@ -0,0 +1,65 @@
+/*
+package com.tashow.cloud.es.config;
+
+import co.elastic.clients.elasticsearch.ElasticsearchClient;
+import co.elastic.clients.json.jackson.JacksonJsonpMapper;
+import co.elastic.clients.transport.ElasticsearchTransport;
+import co.elastic.clients.transport.rest_client.RestClientTransport;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.HttpHost;
+import org.apache.http.auth.AuthScope;
+import org.apache.http.auth.UsernamePasswordCredentials;
+import org.apache.http.client.CredentialsProvider;
+import org.apache.http.impl.client.BasicCredentialsProvider;
+import org.elasticsearch.client.RestClient;
+import org.springframework.boot.autoconfigure.AutoConfiguration;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+
+import java.util.Arrays;
+
+@Slf4j
+@AutoConfiguration
+@EnableConfigurationProperties(ElasticsearchProperties.class)
+public class ElasticsearchConfigTest {
+
+ @Bean
+ public ElasticsearchClient elasticsearchClient(ElasticsearchProperties properties) {
+ // 1. 创建低级 REST 客户端
+ RestClient restClient = RestClient.builder(buildHttpHosts(properties))
+ .setHttpClientConfigCallback(httpClientBuilder -> {
+ // 认证配置
+ if (properties.getUsername() != null) {
+ CredentialsProvider credsProvider = new BasicCredentialsProvider();
+ credsProvider.setCredentials(
+ AuthScope.ANY,
+ new UsernamePasswordCredentials(properties.getUsername(), properties.getPassword())
+ );
+ httpClientBuilder.setDefaultCredentialsProvider(credsProvider);
+ }
+ return httpClientBuilder;
+ })
+ .build();
+
+ // 2. 创建 Transport 层
+ ElasticsearchTransport transport = new RestClientTransport(
+ restClient,
+ new JacksonJsonpMapper() // 使用 Jackson 处理 JSON
+ );
+
+ // 3. 返回新客户端
+ return new ElasticsearchClient(transport);
+ }
+
+ private HttpHost[] buildHttpHosts(ElasticsearchProperties properties) {
+ return Arrays.stream(properties.getUris())
+ .map(uri -> {
+ try {
+ return HttpHost.create(uri);
+ } catch (Exception e) {
+ throw new IllegalArgumentException("Invalid Elasticsearch URI: " + uri, e);
+ }
+ })
+ .toArray(HttpHost[]::new);
+ }
+}*/
diff --git a/tashow-framework/tashow-data-es/src/main/java/com/tashow/cloud/es/config/ElasticsearchProperties.java b/tashow-framework/tashow-data-es/src/main/java/com/tashow/cloud/es/config/ElasticsearchProperties.java
new file mode 100644
index 0000000..2a52ff6
--- /dev/null
+++ b/tashow-framework/tashow-data-es/src/main/java/com/tashow/cloud/es/config/ElasticsearchProperties.java
@@ -0,0 +1,31 @@
+package com.tashow.cloud.es.config;
+
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+import java.util.List;
+
+@Data
+public class ElasticsearchProperties {
+
+ /**
+ * 是否启用 Elasticsearch
+ */
+ private Boolean enabled = true;
+
+ /**
+ * 节点地址列表 (格式: http://ip:port)
+ */
+ private List uris = List.of("http://43.139.42.137:9200");
+
+ /**
+ * 连接超时时间 (ms)
+ */
+ private Integer connectTimeout = 3000;
+
+ /**
+ * 通信超时时间 (ms)
+ */
+ private Integer socketTimeout = 10000;
+}
diff --git a/tashow-framework/tashow-data-es/src/main/java/com/tashow/cloud/es/service/ElasticsearchService.java b/tashow-framework/tashow-data-es/src/main/java/com/tashow/cloud/es/service/ElasticsearchService.java
new file mode 100644
index 0000000..b1488df
--- /dev/null
+++ b/tashow-framework/tashow-data-es/src/main/java/com/tashow/cloud/es/service/ElasticsearchService.java
@@ -0,0 +1,34 @@
+package com.tashow.cloud.es.service;
+
+import co.elastic.clients.elasticsearch.ElasticsearchClient;
+import co.elastic.clients.elasticsearch.core.IndexResponse;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+
+@Service
+public class ElasticsearchService {
+
+ private final ElasticsearchClient client;
+
+ public ElasticsearchService(ElasticsearchClient client) {
+ this.client = client;
+ }
+
+ /**
+ * 向 Elasticsearch 索引中插入数据
+ *
+ * @param indexName 索引名称
+ * @param id 文档 ID
+ * @param jsonData JSON 格式的文档数据
+ * @return 插入结果
+ * @throws IOException 如果发生 I/O 错误
+ */
+ public IndexResponse insertDocument(String indexName, String id, String jsonData) throws IOException {
+ return client.index(i -> i
+ .index(indexName)
+ .id(id)
+ .document(jsonData)
+ );
+ }
+}
diff --git a/tashow-framework/tashow-data-es/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/tashow-framework/tashow-data-es/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
new file mode 100644
index 0000000..00c3efd
--- /dev/null
+++ b/tashow-framework/tashow-data-es/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -0,0 +1,3 @@
+com.tashow.cloud.es.config.ElasticsearchAutoConfiguration
+com.tashow.cloud.es.service.ElasticsearchService
+com.tashow.cloud.es.config.ElasticsearchProperties
diff --git a/tashow-framework/tashow-data-excel/pom.xml b/tashow-framework/tashow-data-excel/pom.xml
index 3074c45..262ee18 100644
--- a/tashow-framework/tashow-data-excel/pom.xml
+++ b/tashow-framework/tashow-data-excel/pom.xml
@@ -36,7 +36,7 @@
com.tashow.cloud
- tashow-module-system-api
+ tashow-system-api
${revision}
diff --git a/tashow-framework/tashow-data-mybatis/src/main/java/com/tashow/cloud/mybatis/mybatis/config/MybatisAutoConfiguration.java b/tashow-framework/tashow-data-mybatis/src/main/java/com/tashow/cloud/mybatis/mybatis/config/BaseMybatisAutoConfiguration.java
similarity index 98%
rename from tashow-framework/tashow-data-mybatis/src/main/java/com/tashow/cloud/mybatis/mybatis/config/MybatisAutoConfiguration.java
rename to tashow-framework/tashow-data-mybatis/src/main/java/com/tashow/cloud/mybatis/mybatis/config/BaseMybatisAutoConfiguration.java
index 0163eb2..7600b7d 100644
--- a/tashow-framework/tashow-data-mybatis/src/main/java/com/tashow/cloud/mybatis/mybatis/config/MybatisAutoConfiguration.java
+++ b/tashow-framework/tashow-data-mybatis/src/main/java/com/tashow/cloud/mybatis/mybatis/config/BaseMybatisAutoConfiguration.java
@@ -28,7 +28,7 @@ import java.util.concurrent.TimeUnit;
@AutoConfiguration(before = MybatisPlusAutoConfiguration.class) // 目的:先于 MyBatis Plus 自动配置,避免 @MapperScan 可能扫描不到 Mapper 打印 warn 日志
@MapperScan(value = "${tashow.info.base-package}", annotationClass = Mapper.class,
lazyInitialization = "${mybatis.lazy-initialization:false}") // Mapper 懒加载,目前仅用于单元测试
-public class MybatisAutoConfiguration {
+public class BaseMybatisAutoConfiguration {
static {
// 动态 SQL 智能优化支持本地缓存加速解析,更完善的租户复杂 XML 动态 SQL 支持,静态注入缓存
diff --git a/tashow-framework/tashow-data-mybatis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/tashow-framework/tashow-data-mybatis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 9df82c2..8a31041 100644
--- a/tashow-framework/tashow-data-mybatis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/tashow-framework/tashow-data-mybatis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1,3 +1,3 @@
com.tashow.cloud.mybatis.datasource.config.DataSourceAutoConfiguration
-com.tashow.cloud.mybatis.mybatis.config.MybatisAutoConfiguration
+com.tashow.cloud.mybatis.mybatis.config.BaseMybatisAutoConfiguration
com.tashow.cloud.mybatis.translate.config.TranslateAutoConfiguration
diff --git a/tashow-framework/tashow-data-permission/pom.xml b/tashow-framework/tashow-data-permission/pom.xml
index 48ca4b3..84f3240 100644
--- a/tashow-framework/tashow-data-permission/pom.xml
+++ b/tashow-framework/tashow-data-permission/pom.xml
@@ -43,7 +43,7 @@
com.tashow.cloud
- tashow-module-system-api
+ tashow-system-api
${revision}
diff --git a/tashow-framework/tashow-data-redis/src/main/java/com/tashow/cloud/redis/config/CacheAutoConfiguration.java b/tashow-framework/tashow-data-redis/src/main/java/com/tashow/cloud/redis/config/TashowCacheAutoConfiguration.java
similarity index 96%
rename from tashow-framework/tashow-data-redis/src/main/java/com/tashow/cloud/redis/config/CacheAutoConfiguration.java
rename to tashow-framework/tashow-data-redis/src/main/java/com/tashow/cloud/redis/config/TashowCacheAutoConfiguration.java
index dcb0e72..37c80f6 100644
--- a/tashow-framework/tashow-data-redis/src/main/java/com/tashow/cloud/redis/config/CacheAutoConfiguration.java
+++ b/tashow-framework/tashow-data-redis/src/main/java/com/tashow/cloud/redis/config/TashowCacheAutoConfiguration.java
@@ -19,7 +19,7 @@ import org.springframework.util.StringUtils;
import java.util.Objects;
-import static com.tashow.cloud.redis.config.RedisAutoConfiguration.buildRedisSerializer;
+import static com.tashow.cloud.redis.config.TashowRedisAutoConfiguration.buildRedisSerializer;
/**
@@ -28,7 +28,7 @@ import static com.tashow.cloud.redis.config.RedisAutoConfiguration.buildRedisSer
@AutoConfiguration
@EnableConfigurationProperties({CacheProperties.class, TashowCacheProperties.class})
@EnableCaching
-public class CacheAutoConfiguration {
+public class TashowCacheAutoConfiguration {
/**
* RedisCacheConfiguration Bean
diff --git a/tashow-framework/tashow-data-redis/src/main/java/com/tashow/cloud/redis/config/RedisAutoConfiguration.java b/tashow-framework/tashow-data-redis/src/main/java/com/tashow/cloud/redis/config/TashowRedisAutoConfiguration.java
similarity index 97%
rename from tashow-framework/tashow-data-redis/src/main/java/com/tashow/cloud/redis/config/RedisAutoConfiguration.java
rename to tashow-framework/tashow-data-redis/src/main/java/com/tashow/cloud/redis/config/TashowRedisAutoConfiguration.java
index 39a9ee7..116c615 100644
--- a/tashow-framework/tashow-data-redis/src/main/java/com/tashow/cloud/redis/config/RedisAutoConfiguration.java
+++ b/tashow-framework/tashow-data-redis/src/main/java/com/tashow/cloud/redis/config/TashowRedisAutoConfiguration.java
@@ -14,7 +14,7 @@ import org.springframework.data.redis.serializer.RedisSerializer;
* Redis 配置类
*/
@AutoConfiguration(before = RedissonAutoConfigurationV2.class) // 目的:使用自己定义的 RedisTemplate Bean
-public class RedisAutoConfiguration {
+public class TashowRedisAutoConfiguration {
/**
* 创建 RedisTemplate Bean,使用 JSON 序列化方式
diff --git a/tashow-framework/tashow-data-redis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/tashow-framework/tashow-data-redis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index bcaa8a2..3b32e89 100644
--- a/tashow-framework/tashow-data-redis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/tashow-framework/tashow-data-redis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1,2 +1,2 @@
-com.tashow.cloud.redis.config.RedisAutoConfiguration
-com.tashow.cloud.redis.config.CacheAutoConfiguration
+com.tashow.cloud.redis.config.TashowRedisAutoConfiguration
+com.tashow.cloud.redis.config.TashowCacheAutoConfiguration
diff --git a/tashow-framework/tashow-framework-mq/pom.xml b/tashow-framework/tashow-framework-mq/pom.xml
index 41a37c1..3128466 100644
--- a/tashow-framework/tashow-framework-mq/pom.xml
+++ b/tashow-framework/tashow-framework-mq/pom.xml
@@ -20,23 +20,16 @@
com.tashow.cloud
tashow-data-redis
-
-
- org.springframework.kafka
- spring-kafka
- true
+ org.springframework.boot
+ spring-boot-starter-amqp
+
org.springframework.amqp
spring-rabbit
true
-
- org.apache.rocketmq
- rocketmq-spring-boot-starter
- true
-
diff --git a/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/package-info.java b/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/package-info.java
new file mode 100644
index 0000000..356754a
--- /dev/null
+++ b/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/package-info.java
@@ -0,0 +1 @@
+package com.tashow.cloud.mq;
\ No newline at end of file
diff --git a/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/config/RedisMQConsumerAutoConfiguration.java b/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/config/RedisMQConsumerAutoConfiguration.java
deleted file mode 100644
index c26f4d2..0000000
--- a/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/config/RedisMQConsumerAutoConfiguration.java
+++ /dev/null
@@ -1,151 +0,0 @@
-package com.tashow.cloud.mq.redis.config;
-
-import cn.hutool.core.map.MapUtil;
-import cn.hutool.core.util.StrUtil;
-import cn.hutool.system.SystemUtil;
-import com.tashow.cloud.common.enums.DocumentEnum;
-import com.tashow.cloud.mq.redis.core.RedisMQTemplate;
-import com.tashow.cloud.mq.redis.core.job.RedisPendingMessageResendJob;
-import com.tashow.cloud.mq.redis.core.pubsub.AbstractRedisChannelMessageListener;
-import com.tashow.cloud.mq.redis.core.stream.AbstractRedisStreamMessageListener;
-import com.tashow.cloud.redis.config.RedisAutoConfiguration;
-import lombok.extern.slf4j.Slf4j;
-import org.redisson.api.RedissonClient;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.autoconfigure.AutoConfiguration;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
-import org.springframework.context.annotation.Bean;
-import org.springframework.data.redis.connection.RedisServerCommands;
-import org.springframework.data.redis.connection.stream.Consumer;
-import org.springframework.data.redis.connection.stream.ObjectRecord;
-import org.springframework.data.redis.connection.stream.ReadOffset;
-import org.springframework.data.redis.connection.stream.StreamOffset;
-import org.springframework.data.redis.core.RedisCallback;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.listener.ChannelTopic;
-import org.springframework.data.redis.listener.RedisMessageListenerContainer;
-import org.springframework.data.redis.stream.StreamMessageListenerContainer;
-import org.springframework.scheduling.annotation.EnableScheduling;
-
-import java.util.List;
-import java.util.Properties;
-
-/**
- * Redis 消息队列 Consumer 配置类
- *
- * @author 芋道源码
- */
-@Slf4j
-@EnableScheduling // 启用定时任务,用于 RedisPendingMessageResendJob 重发消息
-@AutoConfiguration(after = RedisAutoConfiguration.class)
-public class RedisMQConsumerAutoConfiguration {
-
- /**
- * 创建 Redis Pub/Sub 广播消费的容器
- */
- @Bean
- @ConditionalOnBean(AbstractRedisChannelMessageListener.class) // 只有 AbstractChannelMessageListener 存在的时候,才需要注册 Redis pubsub 监听
- public RedisMessageListenerContainer redisMessageListenerContainer(
- RedisMQTemplate redisMQTemplate, List> listeners) {
- // 创建 RedisMessageListenerContainer 对象
- RedisMessageListenerContainer container = new RedisMessageListenerContainer();
- // 设置 RedisConnection 工厂。
- container.setConnectionFactory(redisMQTemplate.getRedisTemplate().getRequiredConnectionFactory());
- // 添加监听器
- listeners.forEach(listener -> {
- listener.setRedisMQTemplate(redisMQTemplate);
- container.addMessageListener(listener, new ChannelTopic(listener.getChannel()));
- log.info("[redisMessageListenerContainer][注册 Channel({}) 对应的监听器({})]",
- listener.getChannel(), listener.getClass().getName());
- });
- return container;
- }
-
- /**
- * 创建 Redis Stream 重新消费的任务
- */
- @Bean
- @ConditionalOnBean(AbstractRedisStreamMessageListener.class) // 只有 AbstractStreamMessageListener 存在的时候,才需要注册 Redis pubsub 监听
- public RedisPendingMessageResendJob redisPendingMessageResendJob(List> listeners,
- RedisMQTemplate redisTemplate,
- @Value("${spring.application.name}") String groupName,
- RedissonClient redissonClient) {
- return new RedisPendingMessageResendJob(listeners, redisTemplate, groupName, redissonClient);
- }
-
- /**
- * 创建 Redis Stream 集群消费的容器
- *
- * 基础知识:Redis Stream 的 xreadgroup 命令
- */
- @Bean(initMethod = "start", destroyMethod = "stop")
- @ConditionalOnBean(AbstractRedisStreamMessageListener.class) // 只有 AbstractStreamMessageListener 存在的时候,才需要注册 Redis pubsub 监听
- public StreamMessageListenerContainer> redisStreamMessageListenerContainer(
- RedisMQTemplate redisMQTemplate, List> listeners) {
- RedisTemplate redisTemplate = redisMQTemplate.getRedisTemplate();
- checkRedisVersion(redisTemplate);
- // 第一步,创建 StreamMessageListenerContainer 容器
- // 创建 options 配置
- StreamMessageListenerContainer.StreamMessageListenerContainerOptions> containerOptions =
- StreamMessageListenerContainer.StreamMessageListenerContainerOptions.builder()
- .batchSize(10) // 一次性最多拉取多少条消息
- .targetType(String.class) // 目标类型。统一使用 String,通过自己封装的 AbstractStreamMessageListener 去反序列化
- .build();
- // 创建 container 对象
- StreamMessageListenerContainer> container =
- StreamMessageListenerContainer.create(redisMQTemplate.getRedisTemplate().getRequiredConnectionFactory(), containerOptions);
-
- // 第二步,注册监听器,消费对应的 Stream 主题
- String consumerName = buildConsumerName();
- listeners.parallelStream().forEach(listener -> {
- log.info("[redisStreamMessageListenerContainer][开始注册 StreamKey({}) 对应的监听器({})]",
- listener.getStreamKey(), listener.getClass().getName());
- // 创建 listener 对应的消费者分组
- try {
- redisTemplate.opsForStream().createGroup(listener.getStreamKey(), listener.getGroup());
- } catch (Exception ignore) {
- }
- // 设置 listener 对应的 redisTemplate
- listener.setRedisMQTemplate(redisMQTemplate);
- // 创建 Consumer 对象
- Consumer consumer = Consumer.from(listener.getGroup(), consumerName);
- // 设置 Consumer 消费进度,以最小消费进度为准
- StreamOffset streamOffset = StreamOffset.create(listener.getStreamKey(), ReadOffset.lastConsumed());
- // 设置 Consumer 监听
- StreamMessageListenerContainer.StreamReadRequestBuilder builder = StreamMessageListenerContainer.StreamReadRequest
- .builder(streamOffset).consumer(consumer)
- .autoAcknowledge(false) // 不自动 ack
- .cancelOnError(throwable -> false); // 默认配置,发生异常就取消消费,显然不符合预期;因此,我们设置为 false
- container.register(builder.build(), listener);
- log.info("[redisStreamMessageListenerContainer][完成注册 StreamKey({}) 对应的监听器({})]",
- listener.getStreamKey(), listener.getClass().getName());
- });
- return container;
- }
-
- /**
- * 构建消费者名字,使用本地 IP + 进程编号的方式。
- * 参考自 RocketMQ clientId 的实现
- *
- * @return 消费者名字
- */
- private static String buildConsumerName() {
- return String.format("%s@%d", SystemUtil.getHostInfo().getAddress(), SystemUtil.getCurrentPID());
- }
-
- /**
- * 校验 Redis 版本号,是否满足最低的版本号要求!
- */
- private static void checkRedisVersion(RedisTemplate redisTemplate) {
- // 获得 Redis 版本
- Properties info = redisTemplate.execute((RedisCallback) RedisServerCommands::info);
- String version = MapUtil.getStr(info, "redis_version");
- // 校验最低版本必须大于等于 5.0.0
- int majorVersion = Integer.parseInt(StrUtil.subBefore(version, '.', false));
- if (majorVersion < 5) {
- throw new IllegalStateException(StrUtil.format("您当前的 Redis 版本为 {},小于最低要求的 5.0.0 版本!" +
- "请参考 {} 文档进行安装。", version, DocumentEnum.REDIS_INSTALL.getUrl()));
- }
- }
-
-}
diff --git a/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/config/RedisMQProducerAutoConfiguration.java b/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/config/RedisMQProducerAutoConfiguration.java
deleted file mode 100644
index 0b2a62a..0000000
--- a/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/config/RedisMQProducerAutoConfiguration.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.tashow.cloud.mq.redis.config;
-
-import com.tashow.cloud.mq.redis.core.RedisMQTemplate;
-import com.tashow.cloud.mq.redis.core.interceptor.RedisMessageInterceptor;
-import com.tashow.cloud.redis.config.RedisAutoConfiguration;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.boot.autoconfigure.AutoConfiguration;
-import org.springframework.context.annotation.Bean;
-import org.springframework.data.redis.core.StringRedisTemplate;
-
-import java.util.List;
-
-/**
- * Redis 消息队列 Producer 配置类
- *
- * @author 芋道源码
- */
-@Slf4j
-@AutoConfiguration(after = RedisAutoConfiguration.class)
-public class RedisMQProducerAutoConfiguration {
-
- @Bean
- public RedisMQTemplate redisMQTemplate(StringRedisTemplate redisTemplate,
- List interceptors) {
- RedisMQTemplate redisMQTemplate = new RedisMQTemplate(redisTemplate);
- // 添加拦截器
- interceptors.forEach(redisMQTemplate::addInterceptor);
- return redisMQTemplate;
- }
-
-}
diff --git a/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/core/RedisMQTemplate.java b/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/core/RedisMQTemplate.java
deleted file mode 100644
index 6d79c41..0000000
--- a/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/core/RedisMQTemplate.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package com.tashow.cloud.mq.redis.core;
-
-import com.tashow.cloud.common.util.json.JsonUtils;
-import com.tashow.cloud.mq.redis.core.interceptor.RedisMessageInterceptor;
-import com.tashow.cloud.mq.redis.core.message.AbstractRedisMessage;
-import com.tashow.cloud.mq.redis.core.pubsub.AbstractRedisChannelMessage;
-import com.tashow.cloud.mq.redis.core.stream.AbstractRedisStreamMessage;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import org.springframework.data.redis.connection.stream.RecordId;
-import org.springframework.data.redis.connection.stream.StreamRecords;
-import org.springframework.data.redis.core.RedisTemplate;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Redis MQ 操作模板类
- *
- * @author 芋道源码
- */
-@AllArgsConstructor
-public class RedisMQTemplate {
-
- @Getter
- private final RedisTemplate redisTemplate;
- /**
- * 拦截器数组
- */
- @Getter
- private final List interceptors = new ArrayList<>();
-
- /**
- * 发送 Redis 消息,基于 Redis pub/sub 实现
- *
- * @param message 消息
- */
- public void send(T message) {
- try {
- sendMessageBefore(message);
- // 发送消息
- redisTemplate.convertAndSend(message.getChannel(), JsonUtils.toJsonString(message));
- } finally {
- sendMessageAfter(message);
- }
- }
-
- /**
- * 发送 Redis 消息,基于 Redis Stream 实现
- *
- * @param message 消息
- * @return 消息记录的编号对象
- */
- public RecordId send(T message) {
- try {
- sendMessageBefore(message);
- // 发送消息
- return redisTemplate.opsForStream().add(StreamRecords.newRecord()
- .ofObject(JsonUtils.toJsonString(message)) // 设置内容
- .withStreamKey(message.getStreamKey())); // 设置 stream key
- } finally {
- sendMessageAfter(message);
- }
- }
-
- /**
- * 添加拦截器
- *
- * @param interceptor 拦截器
- */
- public void addInterceptor(RedisMessageInterceptor interceptor) {
- interceptors.add(interceptor);
- }
-
- private void sendMessageBefore(AbstractRedisMessage message) {
- // 正序
- interceptors.forEach(interceptor -> interceptor.sendMessageBefore(message));
- }
-
- private void sendMessageAfter(AbstractRedisMessage message) {
- // 倒序
- for (int i = interceptors.size() - 1; i >= 0; i--) {
- interceptors.get(i).sendMessageAfter(message);
- }
- }
-
-}
diff --git a/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/core/interceptor/RedisMessageInterceptor.java b/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/core/interceptor/RedisMessageInterceptor.java
deleted file mode 100644
index 3cea3ff..0000000
--- a/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/core/interceptor/RedisMessageInterceptor.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.tashow.cloud.mq.redis.core.interceptor;
-
-import com.tashow.cloud.mq.redis.core.message.AbstractRedisMessage;
-
-/**
- * {@link AbstractRedisMessage} 消息拦截器
- * 通过拦截器,作为插件机制,实现拓展。
- * 例如说,多租户场景下的 MQ 消息处理
- *
- * @author 芋道源码
- */
-public interface RedisMessageInterceptor {
-
- default void sendMessageBefore(AbstractRedisMessage message) {
- }
-
- default void sendMessageAfter(AbstractRedisMessage message) {
- }
-
- default void consumeMessageBefore(AbstractRedisMessage message) {
- }
-
- default void consumeMessageAfter(AbstractRedisMessage message) {
- }
-
-}
diff --git a/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/core/job/RedisPendingMessageResendJob.java b/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/core/job/RedisPendingMessageResendJob.java
deleted file mode 100644
index 7ddd81d..0000000
--- a/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/core/job/RedisPendingMessageResendJob.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package com.tashow.cloud.mq.redis.core.job;
-
-import cn.hutool.core.collection.CollUtil;
-import com.tashow.cloud.mq.redis.core.RedisMQTemplate;
-import com.tashow.cloud.mq.redis.core.stream.AbstractRedisStreamMessageListener;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.redisson.api.RLock;
-import org.redisson.api.RedissonClient;
-import org.springframework.data.domain.Range;
-import org.springframework.data.redis.connection.stream.*;
-import org.springframework.data.redis.core.StreamOperations;
-import org.springframework.scheduling.annotation.Scheduled;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-
-/**
- * 这个任务用于处理,crash 之后的消费者未消费完的消息
- */
-@Slf4j
-@AllArgsConstructor
-public class RedisPendingMessageResendJob {
-
- private static final String LOCK_KEY = "redis:pending:msg:lock";
-
- /**
- * 消息超时时间,默认 5 分钟
- *
- * 1. 超时的消息才会被重新投递
- * 2. 由于定时任务 1 分钟一次,消息超时后不会被立即重投,极端情况下消息5分钟过期后,再等 1 分钟才会被扫瞄到
- */
- private static final int EXPIRE_TIME = 5 * 60;
-
- private final List> listeners;
- private final RedisMQTemplate redisTemplate;
- private final String groupName;
- private final RedissonClient redissonClient;
-
- /**
- * 一分钟执行一次,这里选择每分钟的35秒执行,是为了避免整点任务过多的问题
- */
- @Scheduled(cron = "35 * * * * ?")
- public void messageResend() {
- RLock lock = redissonClient.getLock(LOCK_KEY);
- // 尝试加锁
- if (lock.tryLock()) {
- try {
- execute();
- } catch (Exception ex) {
- log.error("[messageResend][执行异常]", ex);
- } finally {
- lock.unlock();
- }
- }
- }
-
- /**
- * 执行清理逻辑
- *
- * @see 讨论
- */
- private void execute() {
- StreamOperations ops = redisTemplate.getRedisTemplate().opsForStream();
- listeners.forEach(listener -> {
- PendingMessagesSummary pendingMessagesSummary = Objects.requireNonNull(ops.pending(listener.getStreamKey(), groupName));
- // 每个消费者的 pending 队列消息数量
- Map pendingMessagesPerConsumer = pendingMessagesSummary.getPendingMessagesPerConsumer();
- pendingMessagesPerConsumer.forEach((consumerName, pendingMessageCount) -> {
- log.info("[processPendingMessage][消费者({}) 消息数量({})]", consumerName, pendingMessageCount);
- // 每个消费者的 pending消息的详情信息
- PendingMessages pendingMessages = ops.pending(listener.getStreamKey(), Consumer.from(groupName, consumerName), Range.unbounded(), pendingMessageCount);
- if (pendingMessages.isEmpty()) {
- return;
- }
- pendingMessages.forEach(pendingMessage -> {
- // 获取消息上一次传递到 consumer 的时间,
- long lastDelivery = pendingMessage.getElapsedTimeSinceLastDelivery().getSeconds();
- if (lastDelivery < EXPIRE_TIME){
- return;
- }
- // 获取指定 id 的消息体
- List> records = ops.range(listener.getStreamKey(),
- Range.of(Range.Bound.inclusive(pendingMessage.getIdAsString()), Range.Bound.inclusive(pendingMessage.getIdAsString())));
- if (CollUtil.isEmpty(records)) {
- return;
- }
- // 重新投递消息
- redisTemplate.getRedisTemplate().opsForStream().add(StreamRecords.newRecord()
- .ofObject(records.get(0).getValue()) // 设置内容
- .withStreamKey(listener.getStreamKey()));
- // ack 消息消费完成
- redisTemplate.getRedisTemplate().opsForStream().acknowledge(groupName, records.get(0));
- log.info("[processPendingMessage][消息({})重新投递成功]", records.get(0).getId());
- });
- });
- });
- }
-}
diff --git a/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/core/message/AbstractRedisMessage.java b/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/core/message/AbstractRedisMessage.java
deleted file mode 100644
index 546934a..0000000
--- a/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/core/message/AbstractRedisMessage.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.tashow.cloud.mq.redis.core.message;
-
-import lombok.Data;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Redis 消息抽象基类
- *
- * @author 芋道源码
- */
-@Data
-public abstract class AbstractRedisMessage {
-
- /**
- * 头
- */
- private Map headers = new HashMap<>();
-
- public String getHeader(String key) {
- return headers.get(key);
- }
-
- public void addHeader(String key, String value) {
- headers.put(key, value);
- }
-
-}
diff --git a/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/core/pubsub/AbstractRedisChannelMessage.java b/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/core/pubsub/AbstractRedisChannelMessage.java
deleted file mode 100644
index 3a46d92..0000000
--- a/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/core/pubsub/AbstractRedisChannelMessage.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.tashow.cloud.mq.redis.core.pubsub;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.tashow.cloud.mq.redis.core.message.AbstractRedisMessage;
-
-/**
- * Redis Channel Message 抽象类
- *
- * @author 芋道源码
- */
-public abstract class AbstractRedisChannelMessage extends AbstractRedisMessage {
-
- /**
- * 获得 Redis Channel,默认使用类名
- *
- * @return Channel
- */
- @JsonIgnore // 避免序列化。原因是,Redis 发布 Channel 消息的时候,已经会指定。
- public String getChannel() {
- return getClass().getSimpleName();
- }
-
-}
diff --git a/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/core/pubsub/AbstractRedisChannelMessageListener.java b/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/core/pubsub/AbstractRedisChannelMessageListener.java
deleted file mode 100644
index b64a550..0000000
--- a/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/core/pubsub/AbstractRedisChannelMessageListener.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package com.tashow.cloud.mq.redis.core.pubsub;
-
-import cn.hutool.core.util.TypeUtil;
-import com.tashow.cloud.common.util.json.JsonUtils;
-import com.tashow.cloud.mq.redis.core.RedisMQTemplate;
-import com.tashow.cloud.mq.redis.core.interceptor.RedisMessageInterceptor;
-import com.tashow.cloud.mq.redis.core.message.AbstractRedisMessage;
-import lombok.Setter;
-import lombok.SneakyThrows;
-import org.springframework.data.redis.connection.Message;
-import org.springframework.data.redis.connection.MessageListener;
-
-import java.lang.reflect.Type;
-import java.util.List;
-
-/**
- * Redis Pub/Sub 监听器抽象类,用于实现广播消费
- *
- * @param 消息类型。一定要填写噢,不然会报错
- *
- * @author 芋道源码
- */
-public abstract class AbstractRedisChannelMessageListener implements MessageListener {
-
- /**
- * 消息类型
- */
- private final Class messageType;
- /**
- * Redis Channel
- */
- private final String channel;
- /**
- * RedisMQTemplate
- */
- @Setter
- private RedisMQTemplate redisMQTemplate;
-
- @SneakyThrows
- protected AbstractRedisChannelMessageListener() {
- this.messageType = getMessageClass();
- this.channel = messageType.getDeclaredConstructor().newInstance().getChannel();
- }
-
- /**
- * 获得 Sub 订阅的 Redis Channel 通道
- *
- * @return channel
- */
- public final String getChannel() {
- return channel;
- }
-
- @Override
- public final void onMessage(Message message, byte[] bytes) {
- T messageObj = JsonUtils.parseObject(message.getBody(), messageType);
- try {
- consumeMessageBefore(messageObj);
- // 消费消息
- this.onMessage(messageObj);
- } finally {
- consumeMessageAfter(messageObj);
- }
- }
-
- /**
- * 处理消息
- *
- * @param message 消息
- */
- public abstract void onMessage(T message);
-
- /**
- * 通过解析类上的泛型,获得消息类型
- *
- * @return 消息类型
- */
- @SuppressWarnings("unchecked")
- private Class getMessageClass() {
- Type type = TypeUtil.getTypeArgument(getClass(), 0);
- if (type == null) {
- throw new IllegalStateException(String.format("类型(%s) 需要设置消息类型", getClass().getName()));
- }
- return (Class) type;
- }
-
- private void consumeMessageBefore(AbstractRedisMessage message) {
- assert redisMQTemplate != null;
- List interceptors = redisMQTemplate.getInterceptors();
- // 正序
- interceptors.forEach(interceptor -> interceptor.consumeMessageBefore(message));
- }
-
- private void consumeMessageAfter(AbstractRedisMessage message) {
- assert redisMQTemplate != null;
- List interceptors = redisMQTemplate.getInterceptors();
- // 倒序
- for (int i = interceptors.size() - 1; i >= 0; i--) {
- interceptors.get(i).consumeMessageAfter(message);
- }
- }
-
-}
diff --git a/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/core/stream/AbstractRedisStreamMessage.java b/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/core/stream/AbstractRedisStreamMessage.java
deleted file mode 100644
index d254d84..0000000
--- a/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/core/stream/AbstractRedisStreamMessage.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.tashow.cloud.mq.redis.core.stream;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.tashow.cloud.mq.redis.core.message.AbstractRedisMessage;
-
-/**
- * Redis Stream Message 抽象类
- *
- * @author 芋道源码
- */
-public abstract class AbstractRedisStreamMessage extends AbstractRedisMessage {
-
- /**
- * 获得 Redis Stream Key,默认使用类名
- *
- * @return Channel
- */
- @JsonIgnore // 避免序列化
- public String getStreamKey() {
- return getClass().getSimpleName();
- }
-
-}
diff --git a/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/core/stream/AbstractRedisStreamMessageListener.java b/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/core/stream/AbstractRedisStreamMessageListener.java
deleted file mode 100644
index bf30a9b..0000000
--- a/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/core/stream/AbstractRedisStreamMessageListener.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package com.tashow.cloud.mq.redis.core.stream;
-
-import cn.hutool.core.util.TypeUtil;
-import com.tashow.cloud.common.util.json.JsonUtils;
-import com.tashow.cloud.mq.redis.core.RedisMQTemplate;
-import com.tashow.cloud.mq.redis.core.interceptor.RedisMessageInterceptor;
-import com.tashow.cloud.mq.redis.core.message.AbstractRedisMessage;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.SneakyThrows;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.data.redis.connection.stream.ObjectRecord;
-import org.springframework.data.redis.stream.StreamListener;
-
-import java.lang.reflect.Type;
-import java.util.List;
-
-/**
- * Redis Stream 监听器抽象类,用于实现集群消费
- *
- * @param 消息类型。一定要填写噢,不然会报错
- *
- * @author 芋道源码
- */
-public abstract class AbstractRedisStreamMessageListener
- implements StreamListener> {
-
- /**
- * 消息类型
- */
- private final Class messageType;
- /**
- * Redis Channel
- */
- @Getter
- private final String streamKey;
-
- /**
- * Redis 消费者分组,默认使用 spring.application.name 名字
- */
- @Value("${spring.application.name}")
- @Getter
- private String group;
- /**
- * RedisMQTemplate
- */
- @Setter
- private RedisMQTemplate redisMQTemplate;
-
- @SneakyThrows
- protected AbstractRedisStreamMessageListener() {
- this.messageType = getMessageClass();
- this.streamKey = messageType.getDeclaredConstructor().newInstance().getStreamKey();
- }
-
- @Override
- public void onMessage(ObjectRecord message) {
- // 消费消息
- T messageObj = JsonUtils.parseObject(message.getValue(), messageType);
- try {
- consumeMessageBefore(messageObj);
- // 消费消息
- this.onMessage(messageObj);
- // ack 消息消费完成
- redisMQTemplate.getRedisTemplate().opsForStream().acknowledge(group, message);
- // TODO 芋艿:需要额外考虑以下几个点:
- // 1. 处理异常的情况
- // 2. 发送日志;以及事务的结合
- // 3. 消费日志;以及通用的幂等性
- // 4. 消费失败的重试,https://zhuanlan.zhihu.com/p/60501638
- } finally {
- consumeMessageAfter(messageObj);
- }
- }
-
- /**
- * 处理消息
- *
- * @param message 消息
- */
- public abstract void onMessage(T message);
-
- /**
- * 通过解析类上的泛型,获得消息类型
- *
- * @return 消息类型
- */
- @SuppressWarnings("unchecked")
- private Class getMessageClass() {
- Type type = TypeUtil.getTypeArgument(getClass(), 0);
- if (type == null) {
- throw new IllegalStateException(String.format("类型(%s) 需要设置消息类型", getClass().getName()));
- }
- return (Class) type;
- }
-
- private void consumeMessageBefore(AbstractRedisMessage message) {
- assert redisMQTemplate != null;
- List interceptors = redisMQTemplate.getInterceptors();
- // 正序
- interceptors.forEach(interceptor -> interceptor.consumeMessageBefore(message));
- }
-
- private void consumeMessageAfter(AbstractRedisMessage message) {
- assert redisMQTemplate != null;
- List interceptors = redisMQTemplate.getInterceptors();
- // 倒序
- for (int i = interceptors.size() - 1; i >= 0; i--) {
- interceptors.get(i).consumeMessageAfter(message);
- }
- }
-
-}
diff --git a/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/package-info.java b/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/package-info.java
deleted file mode 100644
index cc39879..0000000
--- a/tashow-framework/tashow-framework-mq/src/main/java/com/tashow/cloud/mq/redis/package-info.java
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * 消息队列,基于 Redis 提供:
- * 1. 基于 Pub/Sub 实现广播消费
- * 2. 基于 Stream 实现集群消费
- */
-package com.tashow.cloud.mq.redis;
diff --git a/tashow-framework/tashow-framework-mq/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/tashow-framework/tashow-framework-mq/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index ea037a6..7d713e1 100644
--- a/tashow-framework/tashow-framework-mq/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/tashow-framework/tashow-framework-mq/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1,3 +1 @@
-com.tashow.cloud.mq.redis.config.RedisMQProducerAutoConfiguration
-com.tashow.cloud.mq.redis.config.RedisMQConsumerAutoConfiguration
com.tashow.cloud.mq.rabbitmq.config.RabbitMQAutoConfiguration
diff --git a/tashow-framework/tashow-framework-protection/src/main/java/com/tashow/cloud/protection/idempotent/config/IdempotentConfiguration.java b/tashow-framework/tashow-framework-protection/src/main/java/com/tashow/cloud/protection/idempotent/config/IdempotentConfiguration.java
index 784bbad..67effc5 100644
--- a/tashow-framework/tashow-framework-protection/src/main/java/com/tashow/cloud/protection/idempotent/config/IdempotentConfiguration.java
+++ b/tashow-framework/tashow-framework-protection/src/main/java/com/tashow/cloud/protection/idempotent/config/IdempotentConfiguration.java
@@ -6,14 +6,14 @@ import com.tashow.cloud.protection.idempotent.core.aop.IdempotentAspect;
import com.tashow.cloud.protection.idempotent.core.keyresolver.IdempotentKeyResolver;
import com.tashow.cloud.protection.idempotent.core.keyresolver.impl.DefaultIdempotentKeyResolver;
import com.tashow.cloud.protection.idempotent.core.redis.IdempotentRedisDAO;
-import com.tashow.cloud.redis.config.RedisAutoConfiguration;
+import com.tashow.cloud.redis.config.TashowRedisAutoConfiguration;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.core.StringRedisTemplate;
import java.util.List;
-@AutoConfiguration(after = RedisAutoConfiguration.class)
+@AutoConfiguration(after = TashowRedisAutoConfiguration.class)
public class IdempotentConfiguration {
@Bean
diff --git a/tashow-framework/tashow-framework-protection/src/main/java/com/tashow/cloud/protection/ratelimiter/config/RateLimiterConfiguration.java b/tashow-framework/tashow-framework-protection/src/main/java/com/tashow/cloud/protection/ratelimiter/config/RateLimiterConfiguration.java
index 0ad87a8..b982bf4 100644
--- a/tashow-framework/tashow-framework-protection/src/main/java/com/tashow/cloud/protection/ratelimiter/config/RateLimiterConfiguration.java
+++ b/tashow-framework/tashow-framework-protection/src/main/java/com/tashow/cloud/protection/ratelimiter/config/RateLimiterConfiguration.java
@@ -3,7 +3,7 @@ package com.tashow.cloud.protection.ratelimiter.config;
import com.tashow.cloud.protection.ratelimiter.core.aop.RateLimiterAspect;
import com.tashow.cloud.protection.ratelimiter.core.keyresolver.RateLimiterKeyResolver;
import com.tashow.cloud.protection.ratelimiter.core.keyresolver.impl.*;
-import com.tashow.cloud.redis.config.RedisAutoConfiguration;
+import com.tashow.cloud.redis.config.TashowRedisAutoConfiguration;
import com.tashow.cloud.protection.ratelimiter.core.redis.RateLimiterRedisDAO;
import org.redisson.api.RedissonClient;
import org.springframework.boot.autoconfigure.AutoConfiguration;
@@ -11,7 +11,7 @@ import org.springframework.context.annotation.Bean;
import java.util.List;
-@AutoConfiguration(after = RedisAutoConfiguration.class)
+@AutoConfiguration(after = TashowRedisAutoConfiguration.class)
public class RateLimiterConfiguration {
@Bean
diff --git a/tashow-framework/tashow-framework-protection/src/main/java/com/tashow/cloud/protection/signature/config/ApiSignatureAutoConfiguration.java b/tashow-framework/tashow-framework-protection/src/main/java/com/tashow/cloud/protection/signature/config/ApiSignatureAutoConfiguration.java
index fcf1394..dbb4268 100644
--- a/tashow-framework/tashow-framework-protection/src/main/java/com/tashow/cloud/protection/signature/config/ApiSignatureAutoConfiguration.java
+++ b/tashow-framework/tashow-framework-protection/src/main/java/com/tashow/cloud/protection/signature/config/ApiSignatureAutoConfiguration.java
@@ -2,7 +2,7 @@ package com.tashow.cloud.protection.signature.config;
import com.tashow.cloud.protection.signature.core.redis.ApiSignatureRedisDAO;
import com.tashow.cloud.protection.signature.core.aop.ApiSignatureAspect;
-import com.tashow.cloud.redis.config.RedisAutoConfiguration;
+import com.tashow.cloud.redis.config.TashowRedisAutoConfiguration;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.core.StringRedisTemplate;
@@ -12,7 +12,7 @@ import org.springframework.data.redis.core.StringRedisTemplate;
*
* @author Zhougang
*/
-@AutoConfiguration(after = RedisAutoConfiguration.class)
+@AutoConfiguration(after = TashowRedisAutoConfiguration.class)
public class ApiSignatureAutoConfiguration {
@Bean
diff --git a/tashow-framework/tashow-framework-security/pom.xml b/tashow-framework/tashow-framework-security/pom.xml
index 8a3b31e..f327a7c 100644
--- a/tashow-framework/tashow-framework-security/pom.xml
+++ b/tashow-framework/tashow-framework-security/pom.xml
@@ -56,7 +56,7 @@
com.tashow.cloud
- tashow-module-system-api
+ tashow-system-api
${revision}
diff --git a/tashow-framework/tashow-framework-tenant/src/main/java/com/tashow/cloud/tenant/config/TenantAutoConfiguration.java b/tashow-framework/tashow-framework-tenant/src/main/java/com/tashow/cloud/tenant/config/TenantAutoConfiguration.java
index 2771086..6112d02 100644
--- a/tashow-framework/tashow-framework-tenant/src/main/java/com/tashow/cloud/tenant/config/TenantAutoConfiguration.java
+++ b/tashow-framework/tashow-framework-tenant/src/main/java/com/tashow/cloud/tenant/config/TenantAutoConfiguration.java
@@ -1,17 +1,15 @@
package com.tashow.cloud.tenant.config;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
import com.tashow.cloud.common.enums.WebFilterOrderEnum;
import com.tashow.cloud.mybatis.mybatis.core.util.MyBatisUtils;
import com.tashow.cloud.redis.config.TashowCacheProperties;
import com.tashow.cloud.systemapi.api.tenant.TenantApi;
-import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
-import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
import com.tashow.cloud.tenant.core.aop.TenantIgnoreAspect;
import com.tashow.cloud.tenant.core.db.TenantDatabaseInterceptor;
import com.tashow.cloud.tenant.core.job.TenantJobAspect;
import com.tashow.cloud.tenant.core.mq.rabbitmq.TenantRabbitMQInitializer;
-import com.tashow.cloud.tenant.core.mq.redis.TenantRedisMessageInterceptor;
-import com.tashow.cloud.tenant.core.mq.rocketmq.TenantRocketMQInitializer;
import com.tashow.cloud.tenant.core.redis.TenantRedisCacheManager;
import com.tashow.cloud.tenant.core.security.TenantSecurityWebFilter;
import com.tashow.cloud.tenant.core.service.TenantFrameworkService;
@@ -25,7 +23,6 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.cache.BatchStrategies;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
@@ -97,23 +94,6 @@ public class TenantAutoConfiguration {
return new TenantJobAspect(tenantFrameworkService);
}
- // ========== MQ ==========
-
- /**
- * 多租户 Redis 消息队列的配置类
- *
- * 为什么要单独一个配置类呢?如果直接把 TenantRedisMessageInterceptor Bean 的初始化放外面,会报 RedisMessageInterceptor 类不存在的错误
- */
- @Configuration
- @ConditionalOnClass(name = "com.tashow.cloud.mq.redis.core.RedisMQTemplate")
- public static class TenantRedisMQAutoConfiguration {
-
- @Bean
- public TenantRedisMessageInterceptor tenantRedisMessageInterceptor() {
- return new TenantRedisMessageInterceptor();
- }
-
- }
@Bean
@ConditionalOnClass(name = "org.springframework.amqp.rabbit.core.RabbitTemplate")
@@ -121,12 +101,6 @@ public class TenantAutoConfiguration {
return new TenantRabbitMQInitializer();
}
- @Bean
- @ConditionalOnClass(name = "org.apache.rocketmq.spring.core.RocketMQTemplate")
- public TenantRocketMQInitializer tenantRocketMQInitializer() {
- return new TenantRocketMQInitializer();
- }
-
// ========== Redis ==========
@Bean
diff --git a/tashow-framework/tashow-framework-tenant/src/main/java/com/tashow/cloud/tenant/config/TenantRpcAutoConfiguration.java b/tashow-framework/tashow-framework-tenant/src/main/java/com/tashow/cloud/tenant/config/TenantRpcAutoConfiguration.java
index 35447a9..c905345 100644
--- a/tashow-framework/tashow-framework-tenant/src/main/java/com/tashow/cloud/tenant/config/TenantRpcAutoConfiguration.java
+++ b/tashow-framework/tashow-framework-tenant/src/main/java/com/tashow/cloud/tenant/config/TenantRpcAutoConfiguration.java
@@ -9,7 +9,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
@AutoConfiguration
-@ConditionalOnProperty(prefix = "yudao.tenant", value = "enable", matchIfMissing = true) // 允许使用 yudao.tenant.enable=false 禁用多租户
+@ConditionalOnProperty(prefix = "tashow.tenant", value = "enable", matchIfMissing = true) // 允许使用 yudao.tenant.enable=false 禁用多租户
@EnableFeignClients(clients = TenantApi.class) // 主要是引入相关的 API 服务
public class TenantRpcAutoConfiguration {
diff --git a/tashow-framework/tashow-framework-tenant/src/main/java/com/tashow/cloud/tenant/core/mq/kafka/TenantKafkaEnvironmentPostProcessor.java b/tashow-framework/tashow-framework-tenant/src/main/java/com/tashow/cloud/tenant/core/mq/kafka/TenantKafkaEnvironmentPostProcessor.java
deleted file mode 100644
index 71896db..0000000
--- a/tashow-framework/tashow-framework-tenant/src/main/java/com/tashow/cloud/tenant/core/mq/kafka/TenantKafkaEnvironmentPostProcessor.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.tashow.cloud.tenant.core.mq.kafka;
-
-import cn.hutool.core.util.StrUtil;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.env.EnvironmentPostProcessor;
-import org.springframework.core.env.ConfigurableEnvironment;
-
-/**
- * 多租户的 Kafka 的 {@link EnvironmentPostProcessor} 实现类
- *
- * Kafka Producer 发送消息时,增加 {@link TenantKafkaProducerInterceptor} 拦截器
- *
- * @author 芋道源码
- */
-@Slf4j
-public class TenantKafkaEnvironmentPostProcessor implements EnvironmentPostProcessor {
-
- private static final String PROPERTY_KEY_INTERCEPTOR_CLASSES = "spring.kafka.producer.properties.interceptor.classes";
-
- @Override
- public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
- // 添加 TenantKafkaProducerInterceptor 拦截器
- try {
- String value = environment.getProperty(PROPERTY_KEY_INTERCEPTOR_CLASSES);
- if (StrUtil.isEmpty(value)) {
- value = TenantKafkaProducerInterceptor.class.getName();
- } else {
- value += "," + TenantKafkaProducerInterceptor.class.getName();
- }
- environment.getSystemProperties().put(PROPERTY_KEY_INTERCEPTOR_CLASSES, value);
- } catch (NoClassDefFoundError ignore) {
- // 如果触发 NoClassDefFoundError 异常,说明 TenantKafkaProducerInterceptor 类不存在,即没引入 kafka-spring 依赖
- }
- }
-
-}
diff --git a/tashow-framework/tashow-framework-tenant/src/main/java/com/tashow/cloud/tenant/core/mq/kafka/TenantKafkaProducerInterceptor.java b/tashow-framework/tashow-framework-tenant/src/main/java/com/tashow/cloud/tenant/core/mq/kafka/TenantKafkaProducerInterceptor.java
deleted file mode 100644
index b55e215..0000000
--- a/tashow-framework/tashow-framework-tenant/src/main/java/com/tashow/cloud/tenant/core/mq/kafka/TenantKafkaProducerInterceptor.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.tashow.cloud.tenant.core.mq.kafka;
-
-import cn.hutool.core.util.ReflectUtil;
-import com.tashow.cloud.tenant.core.context.TenantContextHolder;
-import org.apache.kafka.clients.producer.ProducerInterceptor;
-import org.apache.kafka.clients.producer.ProducerRecord;
-import org.apache.kafka.clients.producer.RecordMetadata;
-import org.apache.kafka.common.header.Headers;
-import org.springframework.messaging.handler.invocation.InvocableHandlerMethod;
-
-import java.util.Map;
-
-import static com.tashow.cloud.web.web.core.util.WebFrameworkUtils.HEADER_TENANT_ID;
-
-
-/**
- * Kafka 消息队列的多租户 {@link ProducerInterceptor} 实现类
- *
- * 1. Producer 发送消息时,将 {@link TenantContextHolder} 租户编号,添加到消息的 Header 中
- * 2. Consumer 消费消息时,将消息的 Header 的租户编号,添加到 {@link TenantContextHolder} 中,通过 {@link InvocableHandlerMethod} 实现
- *
- * @author 芋道源码
- */
-public class TenantKafkaProducerInterceptor implements ProducerInterceptor