diff --git a/spring-cloud-alibaba-dependencies/pom.xml b/spring-cloud-alibaba-dependencies/pom.xml index 356418ff3..f438ccf0b 100644 --- a/spring-cloud-alibaba-dependencies/pom.xml +++ b/spring-cloud-alibaba-dependencies/pom.xml @@ -71,6 +71,11 @@ sentinel-core ${sentinel.version} + + com.alibaba.csp + sentinel-parameter-flow-control + ${sentinel.version} + com.alibaba.csp sentinel-datasource-extension diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/resources/application.properties b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/resources/application.properties index fbc9736eb..530d1a277 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/resources/application.properties +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/resources/application.properties @@ -1,6 +1,6 @@ spring.application.name=service-consumer server.port=18083 -management.endpoints.web.exposure.include=* +management.security.enabled=false spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 feign.sentinel.enabled=true diff --git a/spring-cloud-alibaba-sentinel-datasource/pom.xml b/spring-cloud-alibaba-sentinel-datasource/pom.xml index db4ed9974..b3c636ef2 100644 --- a/spring-cloud-alibaba-sentinel-datasource/pom.xml +++ b/spring-cloud-alibaba-sentinel-datasource/pom.xml @@ -18,6 +18,13 @@ com.alibaba.csp sentinel-datasource-extension + true + + + + com.alibaba.csp + sentinel-parameter-flow-control + true diff --git a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/converter/JsonConverter.java b/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/converter/JsonConverter.java index b05626a5a..fccd0a405 100644 --- a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/converter/JsonConverter.java +++ b/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/converter/JsonConverter.java @@ -17,6 +17,7 @@ import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule; import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRuleManager; import com.alibaba.csp.sentinel.slots.block.flow.FlowRule; import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager; +import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowRule; import com.alibaba.csp.sentinel.slots.system.SystemRule; import com.fasterxml.jackson.core.JsonProcessingException; @@ -31,6 +32,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; * @see DegradeRule * @see SystemRule * @see AuthorityRule + * @see ParamFlowRule * @see ObjectMapper */ public class JsonConverter implements Converter> { @@ -47,7 +49,7 @@ public class JsonConverter implements Converter> { public List convert(String source) { List ruleList = new ArrayList<>(); if (StringUtils.isEmpty(source)) { - logger.info( + logger.warn( "Sentinel JsonConverter can not convert rules because source is empty"); return ruleList; } @@ -67,7 +69,7 @@ public class JsonConverter implements Converter> { List rules = Arrays.asList(convertFlowRule(itemJson), convertDegradeRule(itemJson), convertSystemRule(itemJson), - convertAuthorityRule(itemJson)); + convertAuthorityRule(itemJson), convertParamFlowRule(itemJson)); List convertRuleList = new ArrayList<>(); @@ -105,8 +107,6 @@ public class JsonConverter implements Converter> { throw new RuntimeException( "Sentinel JsonConverter convert error: " + e.getMessage(), e); } - logger.info("Sentinel JsonConverter convert {} rules: {}", ruleList.size(), - ruleList); return ruleList; } @@ -158,4 +158,15 @@ public class JsonConverter implements Converter> { return rule; } + private ParamFlowRule convertParamFlowRule(String json) { + ParamFlowRule rule = null; + try { + rule = objectMapper.readValue(json, ParamFlowRule.class); + } + catch (Exception e) { + // ignore + } + return rule; + } + } diff --git a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/converter/XmlConverter.java b/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/converter/XmlConverter.java index c67cc6457..460d3eef6 100644 --- a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/converter/XmlConverter.java +++ b/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/converter/XmlConverter.java @@ -17,6 +17,7 @@ import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule; import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRuleManager; import com.alibaba.csp.sentinel.slots.block.flow.FlowRule; import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager; +import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowRule; import com.alibaba.csp.sentinel.slots.system.SystemRule; import com.fasterxml.jackson.core.JsonProcessingException; @@ -31,6 +32,7 @@ import com.fasterxml.jackson.dataformat.xml.XmlMapper; * @see DegradeRule * @see SystemRule * @see AuthorityRule + * @see ParamFlowRule * @see XmlMapper */ public class XmlConverter implements Converter> { @@ -47,7 +49,7 @@ public class XmlConverter implements Converter> { public List convert(String source) { List ruleList = new ArrayList<>(); if (StringUtils.isEmpty(source)) { - logger.info( + logger.warn( "Sentinel XmlConverter can not convert rules because source is empty"); return ruleList; } @@ -67,7 +69,7 @@ public class XmlConverter implements Converter> { List rules = Arrays.asList(convertFlowRule(itemXml), convertDegradeRule(itemXml), convertSystemRule(itemXml), - convertAuthorityRule(itemXml)); + convertAuthorityRule(itemXml), convertParamFlowRule(itemXml)); List convertRuleList = new ArrayList<>(); @@ -104,8 +106,6 @@ public class XmlConverter implements Converter> { throw new RuntimeException( "Sentinel XmlConverter convert error: " + e.getMessage(), e); } - logger.info("Sentinel XmlConverter convert {} rules: {}", ruleList.size(), - ruleList); return ruleList; } @@ -157,4 +157,15 @@ public class XmlConverter implements Converter> { return rule; } + private ParamFlowRule convertParamFlowRule(String json) { + ParamFlowRule rule = null; + try { + rule = xmlMapper.readValue(json, ParamFlowRule.class); + } + catch (Exception e) { + // ignore + } + return rule; + } + } diff --git a/spring-cloud-alibaba-sentinel/pom.xml b/spring-cloud-alibaba-sentinel/pom.xml index 2ce47d81a..dba86dfb7 100644 --- a/spring-cloud-alibaba-sentinel/pom.xml +++ b/spring-cloud-alibaba-sentinel/pom.xml @@ -42,6 +42,11 @@ true + + com.alibaba.csp + sentinel-parameter-flow-control + + org.springframework.cloud spring-cloud-alibaba-sentinel-datasource diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/endpoint/SentinelEndpoint.java b/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/endpoint/SentinelEndpoint.java index 05262314d..caaec4dfd 100644 --- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/endpoint/SentinelEndpoint.java +++ b/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/endpoint/SentinelEndpoint.java @@ -31,6 +31,8 @@ import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule; import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRuleManager; import com.alibaba.csp.sentinel.slots.block.flow.FlowRule; import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager; +import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowRule; +import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowRuleManager; import com.alibaba.csp.sentinel.slots.system.SystemRule; import com.alibaba.csp.sentinel.slots.system.SystemRuleManager; @@ -60,10 +62,12 @@ public class SentinelEndpoint extends AbstractEndpoint> { List flowRules = FlowRuleManager.getRules(); List degradeRules = DegradeRuleManager.getRules(); List systemRules = SystemRuleManager.getRules(); + List paramFlowRules = ParamFlowRuleManager.getRules(); result.put("properties", sentinelProperties); result.put("FlowRules", flowRules); result.put("DegradeRules", degradeRules); result.put("SystemRules", systemRules); + result.put("ParamFlowRule", paramFlowRules); result.put("datasources", new HashMap()); for (String dataSourceBeanName : dataSourceHandler.getDataSourceBeanNameList()) {