1
0
mirror of https://gitee.com/mirrors/Spring-Cloud-Alibaba.git synced 2021-06-26 13:25:11 +08:00

sentinel starter support paramflowrule

This commit is contained in:
fangjian0423 2018-12-06 17:26:47 +08:00
parent 29998b3e60
commit 5ee251ab97
7 changed files with 52 additions and 9 deletions

View File

@ -71,6 +71,11 @@
<artifactId>sentinel-core</artifactId> <artifactId>sentinel-core</artifactId>
<version>${sentinel.version}</version> <version>${sentinel.version}</version>
</dependency> </dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-parameter-flow-control</artifactId>
<version>${sentinel.version}</version>
</dependency>
<dependency> <dependency>
<groupId>com.alibaba.csp</groupId> <groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-extension</artifactId> <artifactId>sentinel-datasource-extension</artifactId>

View File

@ -1,6 +1,6 @@
spring.application.name=service-consumer spring.application.name=service-consumer
server.port=18083 server.port=18083
management.endpoints.web.exposure.include=* management.security.enabled=false
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
feign.sentinel.enabled=true feign.sentinel.enabled=true

View File

@ -18,6 +18,13 @@
<dependency> <dependency>
<groupId>com.alibaba.csp</groupId> <groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-extension</artifactId> <artifactId>sentinel-datasource-extension</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-parameter-flow-control</artifactId>
<optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>

View File

@ -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.degrade.DegradeRuleManager;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule; 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.FlowRuleManager;
import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowRule;
import com.alibaba.csp.sentinel.slots.system.SystemRule; import com.alibaba.csp.sentinel.slots.system.SystemRule;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
@ -31,6 +32,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
* @see DegradeRule * @see DegradeRule
* @see SystemRule * @see SystemRule
* @see AuthorityRule * @see AuthorityRule
* @see ParamFlowRule
* @see ObjectMapper * @see ObjectMapper
*/ */
public class JsonConverter implements Converter<String, List<AbstractRule>> { public class JsonConverter implements Converter<String, List<AbstractRule>> {
@ -47,7 +49,7 @@ public class JsonConverter implements Converter<String, List<AbstractRule>> {
public List<AbstractRule> convert(String source) { public List<AbstractRule> convert(String source) {
List<AbstractRule> ruleList = new ArrayList<>(); List<AbstractRule> ruleList = new ArrayList<>();
if (StringUtils.isEmpty(source)) { if (StringUtils.isEmpty(source)) {
logger.info( logger.warn(
"Sentinel JsonConverter can not convert rules because source is empty"); "Sentinel JsonConverter can not convert rules because source is empty");
return ruleList; return ruleList;
} }
@ -67,7 +69,7 @@ public class JsonConverter implements Converter<String, List<AbstractRule>> {
List<AbstractRule> rules = Arrays.asList(convertFlowRule(itemJson), List<AbstractRule> rules = Arrays.asList(convertFlowRule(itemJson),
convertDegradeRule(itemJson), convertSystemRule(itemJson), convertDegradeRule(itemJson), convertSystemRule(itemJson),
convertAuthorityRule(itemJson)); convertAuthorityRule(itemJson), convertParamFlowRule(itemJson));
List<AbstractRule> convertRuleList = new ArrayList<>(); List<AbstractRule> convertRuleList = new ArrayList<>();
@ -105,8 +107,6 @@ public class JsonConverter implements Converter<String, List<AbstractRule>> {
throw new RuntimeException( throw new RuntimeException(
"Sentinel JsonConverter convert error: " + e.getMessage(), e); "Sentinel JsonConverter convert error: " + e.getMessage(), e);
} }
logger.info("Sentinel JsonConverter convert {} rules: {}", ruleList.size(),
ruleList);
return ruleList; return ruleList;
} }
@ -158,4 +158,15 @@ public class JsonConverter implements Converter<String, List<AbstractRule>> {
return rule; return rule;
} }
private ParamFlowRule convertParamFlowRule(String json) {
ParamFlowRule rule = null;
try {
rule = objectMapper.readValue(json, ParamFlowRule.class);
}
catch (Exception e) {
// ignore
}
return rule;
}
} }

View File

@ -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.degrade.DegradeRuleManager;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule; 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.FlowRuleManager;
import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowRule;
import com.alibaba.csp.sentinel.slots.system.SystemRule; import com.alibaba.csp.sentinel.slots.system.SystemRule;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
@ -31,6 +32,7 @@ import com.fasterxml.jackson.dataformat.xml.XmlMapper;
* @see DegradeRule * @see DegradeRule
* @see SystemRule * @see SystemRule
* @see AuthorityRule * @see AuthorityRule
* @see ParamFlowRule
* @see XmlMapper * @see XmlMapper
*/ */
public class XmlConverter implements Converter<String, List<AbstractRule>> { public class XmlConverter implements Converter<String, List<AbstractRule>> {
@ -47,7 +49,7 @@ public class XmlConverter implements Converter<String, List<AbstractRule>> {
public List<AbstractRule> convert(String source) { public List<AbstractRule> convert(String source) {
List<AbstractRule> ruleList = new ArrayList<>(); List<AbstractRule> ruleList = new ArrayList<>();
if (StringUtils.isEmpty(source)) { if (StringUtils.isEmpty(source)) {
logger.info( logger.warn(
"Sentinel XmlConverter can not convert rules because source is empty"); "Sentinel XmlConverter can not convert rules because source is empty");
return ruleList; return ruleList;
} }
@ -67,7 +69,7 @@ public class XmlConverter implements Converter<String, List<AbstractRule>> {
List<AbstractRule> rules = Arrays.asList(convertFlowRule(itemXml), List<AbstractRule> rules = Arrays.asList(convertFlowRule(itemXml),
convertDegradeRule(itemXml), convertSystemRule(itemXml), convertDegradeRule(itemXml), convertSystemRule(itemXml),
convertAuthorityRule(itemXml)); convertAuthorityRule(itemXml), convertParamFlowRule(itemXml));
List<AbstractRule> convertRuleList = new ArrayList<>(); List<AbstractRule> convertRuleList = new ArrayList<>();
@ -104,8 +106,6 @@ public class XmlConverter implements Converter<String, List<AbstractRule>> {
throw new RuntimeException( throw new RuntimeException(
"Sentinel XmlConverter convert error: " + e.getMessage(), e); "Sentinel XmlConverter convert error: " + e.getMessage(), e);
} }
logger.info("Sentinel XmlConverter convert {} rules: {}", ruleList.size(),
ruleList);
return ruleList; return ruleList;
} }
@ -157,4 +157,15 @@ public class XmlConverter implements Converter<String, List<AbstractRule>> {
return rule; return rule;
} }
private ParamFlowRule convertParamFlowRule(String json) {
ParamFlowRule rule = null;
try {
rule = xmlMapper.readValue(json, ParamFlowRule.class);
}
catch (Exception e) {
// ignore
}
return rule;
}
} }

View File

@ -42,6 +42,11 @@
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-parameter-flow-control</artifactId>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel-datasource</artifactId> <artifactId>spring-cloud-alibaba-sentinel-datasource</artifactId>

View File

@ -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.degrade.DegradeRuleManager;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule; 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.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.SystemRule;
import com.alibaba.csp.sentinel.slots.system.SystemRuleManager; import com.alibaba.csp.sentinel.slots.system.SystemRuleManager;
@ -60,10 +62,12 @@ public class SentinelEndpoint extends AbstractEndpoint<Map<String, Object>> {
List<FlowRule> flowRules = FlowRuleManager.getRules(); List<FlowRule> flowRules = FlowRuleManager.getRules();
List<DegradeRule> degradeRules = DegradeRuleManager.getRules(); List<DegradeRule> degradeRules = DegradeRuleManager.getRules();
List<SystemRule> systemRules = SystemRuleManager.getRules(); List<SystemRule> systemRules = SystemRuleManager.getRules();
List<ParamFlowRule> paramFlowRules = ParamFlowRuleManager.getRules();
result.put("properties", sentinelProperties); result.put("properties", sentinelProperties);
result.put("FlowRules", flowRules); result.put("FlowRules", flowRules);
result.put("DegradeRules", degradeRules); result.put("DegradeRules", degradeRules);
result.put("SystemRules", systemRules); result.put("SystemRules", systemRules);
result.put("ParamFlowRule", paramFlowRules);
result.put("datasources", new HashMap<String, Object>()); result.put("datasources", new HashMap<String, Object>());
for (String dataSourceBeanName : dataSourceHandler.getDataSourceBeanNameList()) { for (String dataSourceBeanName : dataSourceHandler.getDataSourceBeanNameList()) {