diff --git a/casic-metering-api/pom.xml b/casic-metering-api/pom.xml
index 4985570..a74cb17 100644
--- a/casic-metering-api/pom.xml
+++ b/casic-metering-api/pom.xml
@@ -158,6 +158,10 @@
spring-boot-devtools
true
+
+ com.alibaba.csp
+ sentinel-core
+
diff --git a/casic-metering-api/pom.xml b/casic-metering-api/pom.xml
index 4985570..a74cb17 100644
--- a/casic-metering-api/pom.xml
+++ b/casic-metering-api/pom.xml
@@ -158,6 +158,10 @@
spring-boot-devtools
true
+
+ com.alibaba.csp
+ sentinel-core
+
diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java
index 8d41a35..6775197 100644
--- a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java
+++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java
@@ -1,6 +1,7 @@
package com.casic.missiles.controller;
import cn.hutool.core.util.StrUtil;
+import com.casic.missiles.annotation.SentinelLimitAnnotation;
import com.casic.missiles.core.application.enums.LoginType;
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.core.model.auth.AuthUser;
@@ -47,6 +48,7 @@
/**
* 获取mockToken
*/
+ @SentinelLimitAnnotation(limitCount = 1, resourceName = "mockToken")
@GetMapping("/mockToken")
@ResponseBody
public Object mockToken(String username, String password) {
diff --git a/casic-metering-api/pom.xml b/casic-metering-api/pom.xml
index 4985570..a74cb17 100644
--- a/casic-metering-api/pom.xml
+++ b/casic-metering-api/pom.xml
@@ -158,6 +158,10 @@
spring-boot-devtools
true
+
+ com.alibaba.csp
+ sentinel-core
+
diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java
index 8d41a35..6775197 100644
--- a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java
+++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java
@@ -1,6 +1,7 @@
package com.casic.missiles.controller;
import cn.hutool.core.util.StrUtil;
+import com.casic.missiles.annotation.SentinelLimitAnnotation;
import com.casic.missiles.core.application.enums.LoginType;
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.core.model.auth.AuthUser;
@@ -47,6 +48,7 @@
/**
* 获取mockToken
*/
+ @SentinelLimitAnnotation(limitCount = 1, resourceName = "mockToken")
@GetMapping("/mockToken")
@ResponseBody
public Object mockToken(String username, String password) {
diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml
index 7c5b136..4d90f45 100644
--- a/casic-metering-model/pom.xml
+++ b/casic-metering-model/pom.xml
@@ -54,5 +54,9 @@
casic-file
${admin.version}
+
+ com.alibaba.csp
+ sentinel-core
+
\ No newline at end of file
diff --git a/casic-metering-api/pom.xml b/casic-metering-api/pom.xml
index 4985570..a74cb17 100644
--- a/casic-metering-api/pom.xml
+++ b/casic-metering-api/pom.xml
@@ -158,6 +158,10 @@
spring-boot-devtools
true
+
+ com.alibaba.csp
+ sentinel-core
+
diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java
index 8d41a35..6775197 100644
--- a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java
+++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java
@@ -1,6 +1,7 @@
package com.casic.missiles.controller;
import cn.hutool.core.util.StrUtil;
+import com.casic.missiles.annotation.SentinelLimitAnnotation;
import com.casic.missiles.core.application.enums.LoginType;
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.core.model.auth.AuthUser;
@@ -47,6 +48,7 @@
/**
* 获取mockToken
*/
+ @SentinelLimitAnnotation(limitCount = 1, resourceName = "mockToken")
@GetMapping("/mockToken")
@ResponseBody
public Object mockToken(String username, String password) {
diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml
index 7c5b136..4d90f45 100644
--- a/casic-metering-model/pom.xml
+++ b/casic-metering-model/pom.xml
@@ -54,5 +54,9 @@
casic-file
${admin.version}
+
+ com.alibaba.csp
+ sentinel-core
+
\ No newline at end of file
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/annotation/SentinelLimitAnnotation.java b/casic-metering-model/src/main/java/com/casic/missiles/annotation/SentinelLimitAnnotation.java
new file mode 100644
index 0000000..52af1cf
--- /dev/null
+++ b/casic-metering-model/src/main/java/com/casic/missiles/annotation/SentinelLimitAnnotation.java
@@ -0,0 +1,18 @@
+package com.casic.missiles.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @Description:
+ * @Author: wangpeng
+ * @Date: 2023/7/5 15:14
+ */
+@Target(value = ElementType.METHOD)
+@Retention(value = RetentionPolicy.RUNTIME)
+public @interface SentinelLimitAnnotation {
+ String resourceName();
+ int limitCount() default 5;
+}
diff --git a/casic-metering-api/pom.xml b/casic-metering-api/pom.xml
index 4985570..a74cb17 100644
--- a/casic-metering-api/pom.xml
+++ b/casic-metering-api/pom.xml
@@ -158,6 +158,10 @@
spring-boot-devtools
true
+
+ com.alibaba.csp
+ sentinel-core
+
diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java
index 8d41a35..6775197 100644
--- a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java
+++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java
@@ -1,6 +1,7 @@
package com.casic.missiles.controller;
import cn.hutool.core.util.StrUtil;
+import com.casic.missiles.annotation.SentinelLimitAnnotation;
import com.casic.missiles.core.application.enums.LoginType;
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.core.model.auth.AuthUser;
@@ -47,6 +48,7 @@
/**
* 获取mockToken
*/
+ @SentinelLimitAnnotation(limitCount = 1, resourceName = "mockToken")
@GetMapping("/mockToken")
@ResponseBody
public Object mockToken(String username, String password) {
diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml
index 7c5b136..4d90f45 100644
--- a/casic-metering-model/pom.xml
+++ b/casic-metering-model/pom.xml
@@ -54,5 +54,9 @@
casic-file
${admin.version}
+
+ com.alibaba.csp
+ sentinel-core
+
\ No newline at end of file
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/annotation/SentinelLimitAnnotation.java b/casic-metering-model/src/main/java/com/casic/missiles/annotation/SentinelLimitAnnotation.java
new file mode 100644
index 0000000..52af1cf
--- /dev/null
+++ b/casic-metering-model/src/main/java/com/casic/missiles/annotation/SentinelLimitAnnotation.java
@@ -0,0 +1,18 @@
+package com.casic.missiles.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @Description:
+ * @Author: wangpeng
+ * @Date: 2023/7/5 15:14
+ */
+@Target(value = ElementType.METHOD)
+@Retention(value = RetentionPolicy.RUNTIME)
+public @interface SentinelLimitAnnotation {
+ String resourceName();
+ int limitCount() default 5;
+}
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/aspect/SentinelMethodLimitAop.java b/casic-metering-model/src/main/java/com/casic/missiles/aspect/SentinelMethodLimitAop.java
new file mode 100644
index 0000000..015a4f2
--- /dev/null
+++ b/casic-metering-model/src/main/java/com/casic/missiles/aspect/SentinelMethodLimitAop.java
@@ -0,0 +1,102 @@
+package com.casic.missiles.aspect;
+
+import com.alibaba.csp.sentinel.Entry;
+import com.alibaba.csp.sentinel.SphU;
+import com.alibaba.csp.sentinel.Tracer;
+import com.alibaba.csp.sentinel.slots.block.BlockException;
+import com.alibaba.csp.sentinel.slots.block.RuleConstant;
+import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
+import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
+import com.casic.missiles.annotation.SentinelLimitAnnotation;
+import com.casic.missiles.dto.ReturnUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+/**
+ * @Description:
+ * @Author: wangpeng
+ * @Date: 2023/7/5 15:35
+ */
+@Aspect
+@Component
+public class SentinelMethodLimitAop {
+
+ private static void initFlowRule(String resourceName, int limitCount) {
+ List rules = new ArrayList<>();
+ FlowRule rule = new FlowRule();
+ //设置受保护的资源
+ rule.setResource(resourceName);
+ //设置流控规则 QPS
+ rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
+ //设置受保护的资源阈值
+ rule.setCount(limitCount);
+ rules.add(rule);
+ //加载配置好的规则
+ FlowRuleManager.loadRules(rules);
+ }
+
+ @Pointcut(value = "@annotation(com.casic.missiles.annotation.SentinelLimitAnnotation)")
+ public void rateLimit() {
+
+ }
+
+ @Around("rateLimit()")
+ public Object around(ProceedingJoinPoint joinPoint) {
+ //1、获取当前的调用方法
+ Method currentMethod = getCurrentMethod(joinPoint);
+ if (Objects.isNull(currentMethod)) {
+ return null;
+ }
+ //2、从方法注解定义上获取限流的类型
+ String resourceName = currentMethod.getAnnotation(SentinelLimitAnnotation.class).resourceName();
+ if(StringUtils.isEmpty(resourceName)){
+ throw new RuntimeException("资源名称为空");
+ }
+ int limitCount = currentMethod.getAnnotation(SentinelLimitAnnotation.class).limitCount();
+ initFlowRule(resourceName, limitCount);
+
+ Entry entry = null;
+ Object result = null;
+ try {
+ entry = SphU.entry(resourceName);
+ try {
+ result = joinPoint.proceed();
+ } catch (Throwable throwable) {
+ throwable.printStackTrace();
+ }
+ } catch (BlockException ex) {
+ // 资源访问阻止,被限流或被降级
+ // 在此处进行相应的处理操作
+ System.out.println("blocked");
+ return ReturnUtil.failed("当前服务请求过于频繁,请稍后访问");
+ } catch (Exception e) {
+ Tracer.traceEntry(e, entry);
+ } finally {
+ if (entry != null) {
+ entry.exit();
+ }
+ }
+ return result;
+ }
+
+ private Method getCurrentMethod(JoinPoint joinPoint) {
+ Method[] methods = joinPoint.getTarget().getClass().getMethods();
+ Method target = null;
+ for (Method method : methods) {
+ if (method.getName().equals(joinPoint.getSignature().getName())) {
+ target = method;
+ break;
+ }
+ }
+ return target;
+ }
+}
diff --git a/casic-metering-api/pom.xml b/casic-metering-api/pom.xml
index 4985570..a74cb17 100644
--- a/casic-metering-api/pom.xml
+++ b/casic-metering-api/pom.xml
@@ -158,6 +158,10 @@
spring-boot-devtools
true
+
+ com.alibaba.csp
+ sentinel-core
+
diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java
index 8d41a35..6775197 100644
--- a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java
+++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java
@@ -1,6 +1,7 @@
package com.casic.missiles.controller;
import cn.hutool.core.util.StrUtil;
+import com.casic.missiles.annotation.SentinelLimitAnnotation;
import com.casic.missiles.core.application.enums.LoginType;
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.core.model.auth.AuthUser;
@@ -47,6 +48,7 @@
/**
* 获取mockToken
*/
+ @SentinelLimitAnnotation(limitCount = 1, resourceName = "mockToken")
@GetMapping("/mockToken")
@ResponseBody
public Object mockToken(String username, String password) {
diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml
index 7c5b136..4d90f45 100644
--- a/casic-metering-model/pom.xml
+++ b/casic-metering-model/pom.xml
@@ -54,5 +54,9 @@
casic-file
${admin.version}
+
+ com.alibaba.csp
+ sentinel-core
+
\ No newline at end of file
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/annotation/SentinelLimitAnnotation.java b/casic-metering-model/src/main/java/com/casic/missiles/annotation/SentinelLimitAnnotation.java
new file mode 100644
index 0000000..52af1cf
--- /dev/null
+++ b/casic-metering-model/src/main/java/com/casic/missiles/annotation/SentinelLimitAnnotation.java
@@ -0,0 +1,18 @@
+package com.casic.missiles.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @Description:
+ * @Author: wangpeng
+ * @Date: 2023/7/5 15:14
+ */
+@Target(value = ElementType.METHOD)
+@Retention(value = RetentionPolicy.RUNTIME)
+public @interface SentinelLimitAnnotation {
+ String resourceName();
+ int limitCount() default 5;
+}
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/aspect/SentinelMethodLimitAop.java b/casic-metering-model/src/main/java/com/casic/missiles/aspect/SentinelMethodLimitAop.java
new file mode 100644
index 0000000..015a4f2
--- /dev/null
+++ b/casic-metering-model/src/main/java/com/casic/missiles/aspect/SentinelMethodLimitAop.java
@@ -0,0 +1,102 @@
+package com.casic.missiles.aspect;
+
+import com.alibaba.csp.sentinel.Entry;
+import com.alibaba.csp.sentinel.SphU;
+import com.alibaba.csp.sentinel.Tracer;
+import com.alibaba.csp.sentinel.slots.block.BlockException;
+import com.alibaba.csp.sentinel.slots.block.RuleConstant;
+import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
+import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
+import com.casic.missiles.annotation.SentinelLimitAnnotation;
+import com.casic.missiles.dto.ReturnUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+/**
+ * @Description:
+ * @Author: wangpeng
+ * @Date: 2023/7/5 15:35
+ */
+@Aspect
+@Component
+public class SentinelMethodLimitAop {
+
+ private static void initFlowRule(String resourceName, int limitCount) {
+ List rules = new ArrayList<>();
+ FlowRule rule = new FlowRule();
+ //设置受保护的资源
+ rule.setResource(resourceName);
+ //设置流控规则 QPS
+ rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
+ //设置受保护的资源阈值
+ rule.setCount(limitCount);
+ rules.add(rule);
+ //加载配置好的规则
+ FlowRuleManager.loadRules(rules);
+ }
+
+ @Pointcut(value = "@annotation(com.casic.missiles.annotation.SentinelLimitAnnotation)")
+ public void rateLimit() {
+
+ }
+
+ @Around("rateLimit()")
+ public Object around(ProceedingJoinPoint joinPoint) {
+ //1、获取当前的调用方法
+ Method currentMethod = getCurrentMethod(joinPoint);
+ if (Objects.isNull(currentMethod)) {
+ return null;
+ }
+ //2、从方法注解定义上获取限流的类型
+ String resourceName = currentMethod.getAnnotation(SentinelLimitAnnotation.class).resourceName();
+ if(StringUtils.isEmpty(resourceName)){
+ throw new RuntimeException("资源名称为空");
+ }
+ int limitCount = currentMethod.getAnnotation(SentinelLimitAnnotation.class).limitCount();
+ initFlowRule(resourceName, limitCount);
+
+ Entry entry = null;
+ Object result = null;
+ try {
+ entry = SphU.entry(resourceName);
+ try {
+ result = joinPoint.proceed();
+ } catch (Throwable throwable) {
+ throwable.printStackTrace();
+ }
+ } catch (BlockException ex) {
+ // 资源访问阻止,被限流或被降级
+ // 在此处进行相应的处理操作
+ System.out.println("blocked");
+ return ReturnUtil.failed("当前服务请求过于频繁,请稍后访问");
+ } catch (Exception e) {
+ Tracer.traceEntry(e, entry);
+ } finally {
+ if (entry != null) {
+ entry.exit();
+ }
+ }
+ return result;
+ }
+
+ private Method getCurrentMethod(JoinPoint joinPoint) {
+ Method[] methods = joinPoint.getTarget().getClass().getMethods();
+ Method target = null;
+ for (Method method : methods) {
+ if (method.getName().equals(joinPoint.getSignature().getName())) {
+ target = method;
+ break;
+ }
+ }
+ return target;
+ }
+}
diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/workbench/WorkbenchApprovalMessageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/workbench/WorkbenchApprovalMessageServiceImpl.java
index 6c94ae6..963d150 100644
--- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/workbench/WorkbenchApprovalMessageServiceImpl.java
+++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/workbench/WorkbenchApprovalMessageServiceImpl.java
@@ -80,7 +80,7 @@
List resultList = new ArrayList<>();
//审批消息
if(Objects.nonNull(request.getStatus()) && 0 == request.getStatus()){
- Arrays.stream(ApplyFromIdEnum.values()).parallel().forEach(applyFromIdEnum -> {
+ Arrays.stream(ApplyFromIdEnum.values()).forEach(applyFromIdEnum -> {
if(StringUtils.isNotEmpty(request.getMessageSourceModule()) &&
!applyFromIdEnum.getSource().equals(request.getMessageSourceModule())){
return;
diff --git a/casic-metering-api/pom.xml b/casic-metering-api/pom.xml
index 4985570..a74cb17 100644
--- a/casic-metering-api/pom.xml
+++ b/casic-metering-api/pom.xml
@@ -158,6 +158,10 @@
spring-boot-devtools
true
+
+ com.alibaba.csp
+ sentinel-core
+
diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java
index 8d41a35..6775197 100644
--- a/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java
+++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MockController.java
@@ -1,6 +1,7 @@
package com.casic.missiles.controller;
import cn.hutool.core.util.StrUtil;
+import com.casic.missiles.annotation.SentinelLimitAnnotation;
import com.casic.missiles.core.application.enums.LoginType;
import com.casic.missiles.core.base.controller.BaseController;
import com.casic.missiles.core.model.auth.AuthUser;
@@ -47,6 +48,7 @@
/**
* 获取mockToken
*/
+ @SentinelLimitAnnotation(limitCount = 1, resourceName = "mockToken")
@GetMapping("/mockToken")
@ResponseBody
public Object mockToken(String username, String password) {
diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml
index 7c5b136..4d90f45 100644
--- a/casic-metering-model/pom.xml
+++ b/casic-metering-model/pom.xml
@@ -54,5 +54,9 @@
casic-file
${admin.version}
+
+ com.alibaba.csp
+ sentinel-core
+
\ No newline at end of file
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/annotation/SentinelLimitAnnotation.java b/casic-metering-model/src/main/java/com/casic/missiles/annotation/SentinelLimitAnnotation.java
new file mode 100644
index 0000000..52af1cf
--- /dev/null
+++ b/casic-metering-model/src/main/java/com/casic/missiles/annotation/SentinelLimitAnnotation.java
@@ -0,0 +1,18 @@
+package com.casic.missiles.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @Description:
+ * @Author: wangpeng
+ * @Date: 2023/7/5 15:14
+ */
+@Target(value = ElementType.METHOD)
+@Retention(value = RetentionPolicy.RUNTIME)
+public @interface SentinelLimitAnnotation {
+ String resourceName();
+ int limitCount() default 5;
+}
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/aspect/SentinelMethodLimitAop.java b/casic-metering-model/src/main/java/com/casic/missiles/aspect/SentinelMethodLimitAop.java
new file mode 100644
index 0000000..015a4f2
--- /dev/null
+++ b/casic-metering-model/src/main/java/com/casic/missiles/aspect/SentinelMethodLimitAop.java
@@ -0,0 +1,102 @@
+package com.casic.missiles.aspect;
+
+import com.alibaba.csp.sentinel.Entry;
+import com.alibaba.csp.sentinel.SphU;
+import com.alibaba.csp.sentinel.Tracer;
+import com.alibaba.csp.sentinel.slots.block.BlockException;
+import com.alibaba.csp.sentinel.slots.block.RuleConstant;
+import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
+import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
+import com.casic.missiles.annotation.SentinelLimitAnnotation;
+import com.casic.missiles.dto.ReturnUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+/**
+ * @Description:
+ * @Author: wangpeng
+ * @Date: 2023/7/5 15:35
+ */
+@Aspect
+@Component
+public class SentinelMethodLimitAop {
+
+ private static void initFlowRule(String resourceName, int limitCount) {
+ List rules = new ArrayList<>();
+ FlowRule rule = new FlowRule();
+ //设置受保护的资源
+ rule.setResource(resourceName);
+ //设置流控规则 QPS
+ rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
+ //设置受保护的资源阈值
+ rule.setCount(limitCount);
+ rules.add(rule);
+ //加载配置好的规则
+ FlowRuleManager.loadRules(rules);
+ }
+
+ @Pointcut(value = "@annotation(com.casic.missiles.annotation.SentinelLimitAnnotation)")
+ public void rateLimit() {
+
+ }
+
+ @Around("rateLimit()")
+ public Object around(ProceedingJoinPoint joinPoint) {
+ //1、获取当前的调用方法
+ Method currentMethod = getCurrentMethod(joinPoint);
+ if (Objects.isNull(currentMethod)) {
+ return null;
+ }
+ //2、从方法注解定义上获取限流的类型
+ String resourceName = currentMethod.getAnnotation(SentinelLimitAnnotation.class).resourceName();
+ if(StringUtils.isEmpty(resourceName)){
+ throw new RuntimeException("资源名称为空");
+ }
+ int limitCount = currentMethod.getAnnotation(SentinelLimitAnnotation.class).limitCount();
+ initFlowRule(resourceName, limitCount);
+
+ Entry entry = null;
+ Object result = null;
+ try {
+ entry = SphU.entry(resourceName);
+ try {
+ result = joinPoint.proceed();
+ } catch (Throwable throwable) {
+ throwable.printStackTrace();
+ }
+ } catch (BlockException ex) {
+ // 资源访问阻止,被限流或被降级
+ // 在此处进行相应的处理操作
+ System.out.println("blocked");
+ return ReturnUtil.failed("当前服务请求过于频繁,请稍后访问");
+ } catch (Exception e) {
+ Tracer.traceEntry(e, entry);
+ } finally {
+ if (entry != null) {
+ entry.exit();
+ }
+ }
+ return result;
+ }
+
+ private Method getCurrentMethod(JoinPoint joinPoint) {
+ Method[] methods = joinPoint.getTarget().getClass().getMethods();
+ Method target = null;
+ for (Method method : methods) {
+ if (method.getName().equals(joinPoint.getSignature().getName())) {
+ target = method;
+ break;
+ }
+ }
+ return target;
+ }
+}
diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/workbench/WorkbenchApprovalMessageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/workbench/WorkbenchApprovalMessageServiceImpl.java
index 6c94ae6..963d150 100644
--- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/workbench/WorkbenchApprovalMessageServiceImpl.java
+++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/workbench/WorkbenchApprovalMessageServiceImpl.java
@@ -80,7 +80,7 @@
List resultList = new ArrayList<>();
//审批消息
if(Objects.nonNull(request.getStatus()) && 0 == request.getStatus()){
- Arrays.stream(ApplyFromIdEnum.values()).parallel().forEach(applyFromIdEnum -> {
+ Arrays.stream(ApplyFromIdEnum.values()).forEach(applyFromIdEnum -> {
if(StringUtils.isNotEmpty(request.getMessageSourceModule()) &&
!applyFromIdEnum.getSource().equals(request.getMessageSourceModule())){
return;
diff --git a/pom.xml b/pom.xml
index 9ab0f69..bee8ce1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -49,6 +49,7 @@
2.3.0
1.0
1.3.3
+ 1.8.0
@@ -195,6 +196,12 @@
commons-fileupload
${fileupload.version}
+
+
+ com.alibaba.csp
+ sentinel-core
+ ${sentinel.version}
+