From bfd855f52e34676ee0d69063d50280b7db82d313 Mon Sep 17 00:00:00 2001 From: fangjian0423 Date: Wed, 19 Dec 2018 21:59:40 +0800 Subject: [PATCH] sentinel commercialization feature for 1.x branch --- .../SentinelDataSourceConstants.java | 2 ++ .../DataSourcePropertiesConfiguration.java | 19 +++++++++++++ .../config/NacosDataSourceProperties.java | 27 +++++++++++++++++++ .../alibaba/sentinel/SentinelConstants.java | 7 ++++- .../custom/SentinelDataSourceHandler.java | 25 +++++++++++++++++ .../cloud/alicloud/context/Constants.java | 1 + .../sentinel/SentinelAliCloudListener.java | 2 ++ 7 files changed, 82 insertions(+), 1 deletion(-) diff --git a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/SentinelDataSourceConstants.java b/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/SentinelDataSourceConstants.java index c0b15078..8903b700 100644 --- a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/SentinelDataSourceConstants.java +++ b/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/SentinelDataSourceConstants.java @@ -31,4 +31,6 @@ public interface SentinelDataSourceConstants { String NACOS_DATASOURCE_ENDPOINT = PROPERTY_PREFIX + ".nacos.config.endpoint"; + String PROJECT_NAME = PROPERTY_PREFIX + ".nacos.config.project-name"; + } diff --git a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/DataSourcePropertiesConfiguration.java b/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/DataSourcePropertiesConfiguration.java index 73a8ca82..ccd1b9b1 100644 --- a/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/DataSourcePropertiesConfiguration.java +++ b/spring-cloud-alibaba-sentinel-datasource/src/main/java/org/springframework/cloud/alibaba/sentinel/datasource/config/DataSourcePropertiesConfiguration.java @@ -27,6 +27,25 @@ public class DataSourcePropertiesConfiguration { private ApolloDataSourceProperties apollo; + public DataSourcePropertiesConfiguration() { + } + + public DataSourcePropertiesConfiguration(FileDataSourceProperties file) { + this.file = file; + } + + public DataSourcePropertiesConfiguration(NacosDataSourceProperties nacos) { + this.nacos = nacos; + } + + public DataSourcePropertiesConfiguration(ZookeeperDataSourceProperties zk) { + this.zk = zk; + } + + public DataSourcePropertiesConfiguration(ApolloDataSourceProperties apollo) { + this.apollo = apollo; + } + public FileDataSourceProperties getFile() { return file; } 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 3ccb65b6..88831102 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 @@ -101,4 +101,31 @@ public class NacosDataSourceProperties extends AbstractDataSourceProperties { public void setSecretKey(String secretKey) { this.secretKey = secretKey; } + + public static NacosDataSourceProperties buildFlowByEDAS() { + return buildByEDAS("flow"); + } + + public static NacosDataSourceProperties buildDegradeByEDAS() { + return buildByEDAS("degrade"); + } + + public static NacosDataSourceProperties buildByEDAS(String type) { + NacosDataSourceProperties result = new NacosDataSourceProperties(); + result.setFactoryBeanName( + NacosDataSourceWithAuthorizationFactoryBean.class.getName()); + result.setEndpoint(System.getProperties() + .getProperty(SentinelDataSourceConstants.NACOS_DATASOURCE_ENDPOINT)); + result.setNamespace(System.getProperties() + .getProperty(SentinelDataSourceConstants.NACOS_DATASOURCE_NAMESPACE)); + result.setAccessKey(System.getProperties() + .getProperty(SentinelDataSourceConstants.NACOS_DATASOURCE_AK)); + result.setSecretKey(System.getProperties() + .getProperty(SentinelDataSourceConstants.NACOS_DATASOURCE_SK)); + result.setDataType("json"); + result.setDataId(System.getProperties() + .getProperty(SentinelDataSourceConstants.PROJECT_NAME) + "-" + type); + result.setGroupId("nacos-sentinel"); + return result; + } } diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelConstants.java b/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelConstants.java index 5297bf78..aa6079ac 100644 --- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelConstants.java +++ b/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelConstants.java @@ -21,6 +21,11 @@ package org.springframework.cloud.alibaba.sentinel; */ public interface SentinelConstants { - String PROPERTY_PREFIX = "spring.cloud.sentinel"; + String PROPERTY_PREFIX = "spring.cloud.sentinel"; + + // commercialized + + String FLOW_DATASOURCE_NAME = "edas-flow"; + String DEGRADE_DATASOURCE_NAME = "edas-degrade"; } diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/SentinelDataSourceHandler.java b/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/SentinelDataSourceHandler.java index b203dbe6..423b4532 100644 --- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/SentinelDataSourceHandler.java +++ b/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/custom/SentinelDataSourceHandler.java @@ -23,6 +23,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.TreeMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -30,9 +31,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.cloud.alibaba.sentinel.SentinelConstants; import org.springframework.cloud.alibaba.sentinel.SentinelProperties; +import org.springframework.cloud.alibaba.sentinel.datasource.SentinelDataSourceConstants; import org.springframework.cloud.alibaba.sentinel.datasource.config.AbstractDataSourceProperties; import org.springframework.cloud.alibaba.sentinel.datasource.config.DataSourcePropertiesConfiguration; +import org.springframework.cloud.alibaba.sentinel.datasource.config.NacosDataSourceProperties; import org.springframework.cloud.alibaba.sentinel.datasource.converter.JsonConverter; import org.springframework.cloud.alibaba.sentinel.datasource.converter.XmlConverter; import org.springframework.context.event.EventListener; @@ -90,6 +94,27 @@ public class SentinelDataSourceHandler { DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory) event .getApplicationContext().getAutowireCapableBeanFactory(); + // commercialization + if (!StringUtils.isEmpty(System.getProperties() + .getProperty(SentinelDataSourceConstants.NACOS_DATASOURCE_ENDPOINT))) { + Map newDataSourceMap = new TreeMap<>( + String.CASE_INSENSITIVE_ORDER); + for (Map.Entry entry : sentinelProperties + .getDatasource().entrySet()) { + if (entry.getValue().getValidDataSourceProperties() + .getClass() != NacosDataSourceProperties.class) { + newDataSourceMap.put(entry.getKey(), entry.getValue()); + } + } + newDataSourceMap.put(SentinelConstants.FLOW_DATASOURCE_NAME, + new DataSourcePropertiesConfiguration( + NacosDataSourceProperties.buildFlowByEDAS())); + newDataSourceMap.put(SentinelConstants.DEGRADE_DATASOURCE_NAME, + new DataSourcePropertiesConfiguration( + NacosDataSourceProperties.buildDegradeByEDAS())); + sentinelProperties.setDatasource(newDataSourceMap); + } + for (Map.Entry entry : sentinelProperties .getDatasource().entrySet()) { String dataSourceName = entry.getKey(); diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/Constants.java b/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/Constants.java index ecf22b74..b44773d4 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/Constants.java +++ b/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/Constants.java @@ -27,6 +27,7 @@ public interface Constants { String NACOS_DATASOURCE_SK = PROPERTY_PREFIX + ".nacos.config.secret-key"; String NACOS_DATASOURCE_NAMESPACE = PROPERTY_PREFIX + ".nacos.config.namespace"; String NACOS_DATASOURCE_ENDPOINT = PROPERTY_PREFIX + ".nacos.config.endpoint"; + String PROJECT_NAME = PROPERTY_PREFIX + ".nacos.config.project-name"; } } diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/sentinel/SentinelAliCloudListener.java b/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/sentinel/SentinelAliCloudListener.java index 21c13d26..9e64b835 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/sentinel/SentinelAliCloudListener.java +++ b/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/sentinel/SentinelAliCloudListener.java @@ -52,6 +52,8 @@ public class SentinelAliCloudListener edasChangeOrderConfiguration.getDauthAccessKey()); System.getProperties().setProperty(Constants.Sentinel.NACOS_DATASOURCE_SK, edasChangeOrderConfiguration.getDauthSecretKey()); + System.getProperties().setProperty(Constants.Sentinel.PROJECT_NAME, + edasChangeOrderConfiguration.getProjectName()); } @Override