diff --git a/pom.xml b/pom.xml
index b383cf27..4543d0aa 100644
--- a/pom.xml
+++ b/pom.xml
@@ -92,7 +92,7 @@
spring-cloud-alibaba-dependencies
spring-cloud-alibaba-sentinel
spring-cloud-alibaba-sentinel-datasource
- spring-cloud-alibaba-sentinel-zuul
+ spring-cloud-alibaba-sentinel-gateway
spring-cloud-alibaba-nacos-config
spring-cloud-alibaba-nacos-discovery
spring-cloud-alibaba-seata
diff --git a/spring-cloud-alibaba-dependencies/pom.xml b/spring-cloud-alibaba-dependencies/pom.xml
index 94bfa05e..bb075ac5 100644
--- a/spring-cloud-alibaba-dependencies/pom.xml
+++ b/spring-cloud-alibaba-dependencies/pom.xml
@@ -17,7 +17,7 @@
Spring Cloud Alibaba Dependencies
- 1.5.2
+ 1.6.0
3.1.0
0.4.2
1.0.0
@@ -152,6 +152,11 @@
sentinel-zuul-adapter
${sentinel.version}
+
+ com.alibaba.csp
+ sentinel-spring-cloud-gateway-adapter
+ ${sentinel.version}
+
com.alibaba.csp
sentinel-transport-simple-http
@@ -187,6 +192,17 @@
sentinel-cluster-client-default
${sentinel.version}
+
+ com.alibaba.csp
+ sentinel-spring-webflux-adapter
+ ${sentinel.version}
+
+
+
+ com.alibaba.csp
+ sentinel-api-gateway-adapter-common
+ ${sentinel.version}
+
@@ -252,7 +268,7 @@
org.springframework.cloud
- spring-cloud-alibaba-sentinel-zuul
+ spring-cloud-alibaba-sentinel-gateway
${project.version}
diff --git a/spring-cloud-alibaba-sentinel-datasource/pom.xml b/spring-cloud-alibaba-sentinel-datasource/pom.xml
index 81817ae7..a7ea7472 100644
--- a/spring-cloud-alibaba-sentinel-datasource/pom.xml
+++ b/spring-cloud-alibaba-sentinel-datasource/pom.xml
@@ -27,6 +27,12 @@
true
+
+ com.alibaba.csp
+ sentinel-api-gateway-adapter-common
+ true
+
+
com.alibaba.csp
sentinel-datasource-nacos
diff --git a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/RuleType.java b/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/RuleType.java
index e59a5735..2318f321 100644
--- a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/RuleType.java
+++ b/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/RuleType.java
@@ -6,6 +6,8 @@ import java.util.Optional;
import org.springframework.cloud.alibaba.sentinel.datasource.config.AbstractDataSourceProperties;
import org.springframework.util.StringUtils;
+import com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinition;
+import com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayFlowRule;
import com.alibaba.csp.sentinel.slots.block.AbstractRule;
import com.alibaba.csp.sentinel.slots.block.authority.AuthorityRule;
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule;
@@ -40,7 +42,15 @@ public enum RuleType {
/**
* authority
*/
- AUTHORITY("authority", AuthorityRule.class);
+ AUTHORITY("authority", AuthorityRule.class),
+ /**
+ * gateway flow
+ */
+ GW_FLOW("gw-flow", GatewayFlowRule.class),
+ /**
+ * api
+ */
+ GW_API_GROUP("gw-api-group", ApiDefinition.class);
/**
* alias for {@link AbstractRule}
diff --git a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/AbstractDataSourceProperties.java b/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/AbstractDataSourceProperties.java
index 272252c2..0b830217 100644
--- a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/AbstractDataSourceProperties.java
+++ b/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/AbstractDataSourceProperties.java
@@ -4,7 +4,10 @@ import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import org.springframework.cloud.alibaba.sentinel.datasource.RuleType;
+import org.springframework.core.env.Environment;
+import com.alibaba.csp.sentinel.adapter.gateway.common.api.GatewayApiDefinitionManager;
+import com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayRuleManager;
import com.alibaba.csp.sentinel.datasource.AbstractDataSource;
import com.alibaba.csp.sentinel.slots.block.authority.AuthorityRuleManager;
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRuleManager;
@@ -28,6 +31,8 @@ public class AbstractDataSourceProperties {
private String converterClass;
@JsonIgnore
private final String factoryBeanName;
+ @JsonIgnore
+ private Environment env;
public AbstractDataSourceProperties(String factoryBeanName) {
this.factoryBeanName = factoryBeanName;
@@ -61,6 +66,14 @@ public class AbstractDataSourceProperties {
return factoryBeanName;
}
+ protected Environment getEnv() {
+ return env;
+ }
+
+ public void setEnv(Environment env) {
+ this.env = env;
+ }
+
public void preCheck(String dataSourceName) {
}
@@ -82,6 +95,12 @@ public class AbstractDataSourceProperties {
case AUTHORITY:
AuthorityRuleManager.register2Property(dataSource.getProperty());
break;
+ case GW_FLOW:
+ GatewayRuleManager.register2Property(dataSource.getProperty());
+ break;
+ case GW_API_GROUP:
+ GatewayApiDefinitionManager.register2Property(dataSource.getProperty());
+ break;
default:
break;
}
diff --git a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/NacosDataSourceProperties.java b/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/NacosDataSourceProperties.java
index 9df4d473..12c6e7f7 100644
--- a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/NacosDataSourceProperties.java
+++ b/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/NacosDataSourceProperties.java
@@ -2,8 +2,6 @@ package org.springframework.cloud.alibaba.sentinel.datasource.config;
import javax.validation.constraints.NotEmpty;
-import org.springframework.cloud.alibaba.sentinel.datasource.RuleType;
-import org.springframework.cloud.alibaba.sentinel.datasource.SentinelDataSourceConstants;
import org.springframework.cloud.alibaba.sentinel.datasource.factorybean.NacosDataSourceFactoryBean;
import org.springframework.util.StringUtils;
@@ -34,9 +32,13 @@ public class NacosDataSourceProperties extends AbstractDataSourceProperties {
@Override
public void preCheck(String dataSourceName) {
- if (StringUtils.isEmpty(serverAddr) && acmPropertiesInvalid()) {
- throw new IllegalArgumentException(
- "NacosDataSource properties value not correct. serverAddr is empty but there is empty value in accessKey, secretKey, endpoint, namespace property");
+ if (StringUtils.isEmpty(serverAddr)) {
+ serverAddr = this.getEnv().getProperty(
+ "spring.cloud.sentinel.datasource.nacos.server-addr", "");
+ if (StringUtils.isEmpty(serverAddr)) {
+ throw new IllegalArgumentException(
+ "NacosDataSource server-addr is empty");
+ }
}
}
@@ -96,9 +98,4 @@ public class NacosDataSourceProperties extends AbstractDataSourceProperties {
this.secretKey = secretKey;
}
- public boolean acmPropertiesInvalid() {
- return StringUtils.isEmpty(endpoint) || StringUtils.isEmpty(accessKey)
- || StringUtils.isEmpty(secretKey) || StringUtils.isEmpty(namespace);
- }
-
}
diff --git a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/ZookeeperDataSourceProperties.java b/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/ZookeeperDataSourceProperties.java
index 0ebfee4d..65fcaf09 100644
--- a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/ZookeeperDataSourceProperties.java
+++ b/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/ZookeeperDataSourceProperties.java
@@ -3,6 +3,7 @@ package org.springframework.cloud.alibaba.sentinel.datasource.config;
import javax.validation.constraints.NotEmpty;
import org.springframework.cloud.alibaba.sentinel.datasource.factorybean.ZookeeperDataSourceFactoryBean;
+import org.springframework.util.StringUtils;
/**
* Zookeeper Properties class Using by {@link DataSourcePropertiesConfiguration} and
@@ -25,6 +26,18 @@ public class ZookeeperDataSourceProperties extends AbstractDataSourceProperties
private String dataId;
+ @Override
+ public void preCheck(String dataSourceName) {
+ if (StringUtils.isEmpty(serverAddr)) {
+ serverAddr = this.getEnv()
+ .getProperty("spring.cloud.sentinel.datasource.zk.server-addr", "");
+ if (StringUtils.isEmpty(serverAddr)) {
+ throw new IllegalArgumentException(
+ "ZookeeperDataSource server-addr is empty");
+ }
+ }
+ }
+
public String getServerAddr() {
return serverAddr;
}
diff --git a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/converter/SentinelConverter.java b/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/converter/SentinelConverter.java
index 302bcd45..649f8f3b 100644
--- a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/converter/SentinelConverter.java
+++ b/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/converter/SentinelConverter.java
@@ -1,7 +1,20 @@
package org.springframework.cloud.alibaba.sentinel.datasource.converter;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Optional;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.cloud.alibaba.sentinel.datasource.RuleType;
+import org.springframework.util.StringUtils;
+
+import com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinition;
+import com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayFlowRule;
import com.alibaba.csp.sentinel.datasource.Converter;
-import com.alibaba.csp.sentinel.slots.block.AbstractRule;
import com.alibaba.csp.sentinel.slots.block.authority.AuthorityRule;
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule;
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRuleManager;
@@ -13,15 +26,6 @@ import com.alibaba.csp.sentinel.slots.system.SystemRule;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.cloud.alibaba.sentinel.datasource.RuleType;
-import org.springframework.util.StringUtils;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Optional;
/**
* Convert sentinel rules for json or xml array Using strict mode to parse json or xml
@@ -34,8 +38,8 @@ import java.util.Optional;
* @see ParamFlowRule
* @see ObjectMapper
*/
-public abstract class SentinelConverter
- implements Converter> {
+public abstract class SentinelConverter
+ implements Converter> {
private static final Logger log = LoggerFactory.getLogger(SentinelConverter.class);
@@ -49,11 +53,20 @@ public abstract class SentinelConverter
}
@Override
- public List convert(String source) {
- List ruleList = new ArrayList<>();
+ public Collection