xl-parent:http://192.168.30.233:8060/cru/XLPAR-75
servie pom.xml增加依赖
<!--sentinel熔断框架 --> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-apache-dubbo-adapter</artifactId> <version>1.7.2</version> </dependency> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-transport-simple-http</artifactId> <version>1.7.2</version> </dependency> <dependency> <artifactId>sentinel-datasource-apollo</artifactId> <groupId>com.alibaba.csp</groupId> <version>1.7.2</version> </dependency> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-annotation-aspectj</artifactId> <version>1.7.2</version> </dependency>
spring xml配置 <bean class="com.alibaba.csp.sentinel.annotation.aspectj.SentinelResourceAspect" /> <bean class="net.xuele.sentinel.SentinelRuleLoader" /> public class SentinelRuleLoader { @PostConstruct public void post() { loadFlowRules(); loadDegradeRules(); } public static void loadFlowRules() { ReadableDataSource<String, List<FlowRule>> flowRuleDataSource = new ApolloDataSource<>( "application", "flowRules", "[]", source -> JSON.parseObject(source, new TypeReference<List<FlowRule>>() { })); FlowRuleManager.register2Property(flowRuleDataSource.getProperty()); } public static void loadDegradeRules() { ReadableDataSource<String, List<DegradeRule>> degradeRuleDataSource = new ApolloDataSource<>( "application", "degradeRules", "[]", source -> JSON.parseObject(source, new TypeReference<List<DegradeRule>>() { })); DegradeRuleManager.register2Property(degradeRuleDataSource.getProperty()); } }
配置中心:
flowRules:[{"grade":1,"count":"3","resource":"getByUserId"}] //FlowRule
degradeRules:[{"resource":"queryUserDetailsOfPage","count":200,"grade":0,"minRequestAmount":100,"timeWindow":3}] //DegradeRule
当平均响应时间高于200毫秒,并且当前的并发数高于100,则熔断3秒
@Override @SentinelResource(value = "getByUserId", blockHandler = "handleException", exceptionsToIgnore = MemberException.class) public UserDTO getByUserId(String userId) { return userCoreService.getByUserId(userId); }
/** * aop调用,不可删除,对应getByUserId的熔断处理 */ public UserDTO handleException(String userId, BlockException ex) { logger.error(userId, ex); return new UserDTO(); }
@SentinelResource(value = "queryUserDetailsOfPage", blockHandler = "handleExceptionOfQueryUserDetailsOfPage", exceptionsToIgnore = MemberException.class) public List<UserDetailDTO> queryUserDetailsOfPage(UserDetailRequestDTO userDetailRequestDTO)
/** * aop调用,不可删除,对应queryUserDetailsOfPag的熔断处理 */ public List<UserDetailDTO> handleExceptionOfQueryUserDetailsOfPage(UserDetailRequestDTO userDetailRequestDTO, BlockException ex) { logger.warn(ReflectionToStringBuilder.toString(userDetailRequestDTO), ex); return Collections.emptyList(); }
连控制台:
-Djava.net.preferIPv4Stack=true
-Dcsp.sentinel.api.port=8719
-Dcsp.sentinel.dashboard.server=192.168.1.42:8088
-Dproject.name=member-service
启动控制台:
nohup java -Dserver.port=8088 -Dcsp.sentinel.dashboard.server=localhost:8088 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar &