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} +