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