feat:support consul config. (#1410)

Co-authored-by: Haotian Zhang <skyebefreeman@qq.com>
pull/1411/head
Fishtail 3 months ago committed by GitHub
parent 1f05da13fe
commit 850a105522
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -19,3 +19,4 @@
- [feat:add scg-mvc example](https://github.com/Tencent/spring-cloud-tencent/pull/1367)
- [feat:add zero protection.](https://github.com/Tencent/spring-cloud-tencent/pull/1408)
- [feat:add Tencent Cloud TSF support.](https://github.com/Tencent/spring-cloud-tencent/pull/1409)
- [feat:support consul config.](https://github.com/Tencent/spring-cloud-tencent/pull/1410)

@ -27,13 +27,15 @@ import com.tencent.cloud.polaris.config.config.PolarisConfigProperties;
import com.tencent.cloud.polaris.config.config.PolarisCryptoConfigProperties;
import com.tencent.cloud.polaris.context.PolarisConfigurationConfigModifier;
import com.tencent.cloud.polaris.context.config.PolarisContextProperties;
import com.tencent.polaris.api.utils.CollectionUtils;
import com.tencent.polaris.factory.config.ConfigurationImpl;
import com.tencent.polaris.factory.config.configuration.ConfigFilterConfigImpl;
import com.tencent.polaris.factory.config.configuration.ConnectorConfigImpl;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.CollectionUtils;
import static com.tencent.polaris.api.config.plugin.DefaultPlugins.LOCAL_FILE_CONNECTOR_TYPE;
/**
@ -44,9 +46,6 @@ import org.springframework.util.CollectionUtils;
public class ConfigurationModifier implements PolarisConfigurationConfigModifier {
private static final Logger LOGGER = LoggerFactory.getLogger(ConfigurationModifier.class);
private static final String DATA_SOURCE_POLARIS = "polaris";
private static final String DATA_SOURCE_LOCAL = "local";
private final PolarisConfigProperties polarisConfigProperties;
private final PolarisCryptoConfigProperties polarisCryptoConfigProperties;
@ -68,15 +67,8 @@ public class ConfigurationModifier implements PolarisConfigurationConfigModifier
if (!polarisContextProperties.getEnabled() || !polarisConfigProperties.isEnabled()) {
return;
}
if (StringUtils.equalsIgnoreCase(polarisConfigProperties.getDataSource(), DATA_SOURCE_POLARIS)) {
initByPolarisDataSource(configuration);
}
else if (StringUtils.equalsIgnoreCase(polarisConfigProperties.getDataSource(), DATA_SOURCE_LOCAL)) {
initByLocalDataSource(configuration);
}
else {
throw new RuntimeException("Unsupported config data source");
}
initDataSource(configuration);
ConfigFilterConfigImpl configFilterConfig = configuration.getConfigFile().getConfigFilterConfig();
configFilterConfig.setEnable(polarisCryptoConfigProperties.isEnabled());
@ -86,18 +78,15 @@ public class ConfigurationModifier implements PolarisConfigurationConfigModifier
}
}
private void initByLocalDataSource(ConfigurationImpl configuration) {
configuration.getConfigFile().getServerConnector().setConnectorType("localFile");
String localFileRootPath = polarisConfigProperties.getLocalFileRootPath();
configuration.getConfigFile().getServerConnector().setPersistDir(localFileRootPath);
LOGGER.info("[SCT] Run spring cloud tencent config with local data source. localFileRootPath = {}", localFileRootPath);
}
private void initByPolarisDataSource(ConfigurationImpl configuration) {
private void initDataSource(ConfigurationImpl configuration) {
// set connector type
configuration.getConfigFile().getServerConnector().setConnectorType("polaris");
configuration.getConfigFile().getServerConnector().setConnectorType(polarisConfigProperties.getDataSource());
if (StringUtils.equalsIgnoreCase(polarisConfigProperties.getDataSource(), LOCAL_FILE_CONNECTOR_TYPE)) {
String localFileRootPath = polarisConfigProperties.getLocalFileRootPath();
configuration.getConfigFile().getServerConnector().setPersistDir(localFileRootPath);
LOGGER.info("[SCT] Run spring cloud tencent config with local data source. localFileRootPath = {}", localFileRootPath);
return;
}
// set config server address
List<String> configAddresses;
@ -119,6 +108,11 @@ public class ConfigurationModifier implements PolarisConfigurationConfigModifier
configuration.getConfigFile().getServerConnector().setAddresses(configAddresses);
if (StringUtils.isNotEmpty(polarisConfigProperties.getToken())) {
ConnectorConfigImpl connectorConfig = configuration.getConfigFile().getServerConnector();
connectorConfig.setToken(polarisConfigProperties.getToken());
}
LOGGER.info("[SCT] Run spring cloud tencent config in polaris data source.");
}

@ -191,8 +191,12 @@ public class PolarisConfigFileLocator implements PropertySourceLocator {
String namespace = polarisContextProperties.getNamespace();
for (ConfigFileGroup configFileGroup : configFileGroups) {
String group = configFileGroup.getName();
String groupNamespace = configFileGroup.getNamespace();
if (!StringUtils.hasText(groupNamespace)) {
groupNamespace = namespace;
}
String group = configFileGroup.getName();
if (!StringUtils.hasText(group)) {
throw new IllegalArgumentException("polaris config group name cannot be empty.");
}
@ -203,26 +207,26 @@ public class PolarisConfigFileLocator implements PropertySourceLocator {
}
for (String fileName : files) {
PolarisPropertySource polarisPropertySource = loadPolarisPropertySource(namespace, group, fileName);
PolarisPropertySource polarisPropertySource = loadPolarisPropertySource(groupNamespace, group, fileName);
compositePropertySource.addPropertySource(polarisPropertySource);
PolarisPropertySourceManager.addPropertySource(polarisPropertySource);
LOGGER.info("[SCT Config] Load and inject polaris config file success. namespace = {}, group = {}, fileName = {}", namespace, group, fileName);
LOGGER.info("[SCT Config] Load and inject polaris config file success. namespace = {}, group = {}, fileName = {}", groupNamespace, group, fileName);
}
}
}
private PolarisPropertySource loadPolarisPropertySource(String namespace, String group, String fileName) {
ConfigKVFile configKVFile;
// unknown extension is resolved as properties file
if (ConfigFileFormat.isPropertyFile(fileName) || ConfigFileFormat.isUnknownFile(fileName)) {
configKVFile = configFileService.getConfigPropertiesFile(namespace, group, fileName);
}
else if (ConfigFileFormat.isYamlFile(fileName)) {
// unknown extension is resolved as yaml file
if (ConfigFileFormat.isYamlFile(fileName) || ConfigFileFormat.isUnknownFile(fileName)) {
configKVFile = configFileService.getConfigYamlFile(namespace, group, fileName);
}
else if (ConfigFileFormat.isPropertyFile(fileName)) {
configKVFile = configFileService.getConfigPropertiesFile(namespace, group, fileName);
}
else {
LOGGER.warn("[SCT Config] Unsupported config file. namespace = {}, group = {}, fileName = {}", namespace, group, fileName);

@ -112,7 +112,10 @@ public final class PolarisConfigFilePuller {
*/
public void initCustomPolarisConfigFile(CompositePropertySource compositePropertySource,
ConfigFileGroup configFileGroup) {
String namespace = polarisContextProperties.getNamespace();
String groupNamespace = configFileGroup.getNamespace();
if (!StringUtils.hasText(groupNamespace)) {
groupNamespace = polarisContextProperties.getNamespace();
}
String group = configFileGroup.getName();
if (!StringUtils.hasText(group)) {
throw new IllegalArgumentException("polaris config group name cannot be empty.");
@ -122,25 +125,24 @@ public final class PolarisConfigFilePuller {
return;
}
for (String fileName : files) {
PolarisPropertySource polarisPropertySource = loadPolarisPropertySource(namespace, group, fileName);
PolarisPropertySource polarisPropertySource = loadPolarisPropertySource(groupNamespace, group, fileName);
compositePropertySource.addPropertySource(polarisPropertySource);
PolarisPropertySourceManager.addPropertySource(polarisPropertySource);
LOGGER.info(
"[SCT Config] Load and inject polaris config file success. namespace = {}, group = {}, fileName = {}",
namespace, group, fileName);
groupNamespace, group, fileName);
}
}
private PolarisPropertySource loadPolarisPropertySource(String namespace, String group, String fileName) {
ConfigKVFile configKVFile;
// unknown extension is resolved as properties file
if (ConfigFileFormat.isPropertyFile(fileName)
|| ConfigFileFormat.isUnknownFile(fileName)) {
configKVFile = configFileService.getConfigPropertiesFile(namespace, group, fileName);
}
else if (ConfigFileFormat.isYamlFile(fileName)) {
// unknown extension is resolved as yaml file
if (ConfigFileFormat.isYamlFile(fileName) || ConfigFileFormat.isUnknownFile(fileName)) {
configKVFile = configFileService.getConfigYamlFile(namespace, group, fileName);
}
else if (ConfigFileFormat.isPropertyFile(fileName)) {
configKVFile = configFileService.getConfigPropertiesFile(namespace, group, fileName);
}
else {
LOGGER.warn("[SCT Config] Unsupported config file. namespace = {}, group = {}, fileName = {}", namespace,
group, fileName);

@ -26,6 +26,8 @@ import java.util.List;
*/
public class ConfigFileGroup {
private String namespace;
/**
* group name.
*/
@ -36,6 +38,14 @@ public class ConfigFileGroup {
*/
private List<String> files;
public String getNamespace() {
return namespace;
}
public void setNamespace(String namespace) {
this.namespace = namespace;
}
public String getName() {
return name;
}
@ -54,6 +64,10 @@ public class ConfigFileGroup {
@Override
public String toString() {
return "ConfigFileGroup{" + "name='" + name + '\'' + ", file=" + files + '}';
return "ConfigFileGroup{" +
"namespace='" + namespace + '\'' +
", name='" + name + '\'' +
", files=" + files +
'}';
}
}

@ -50,6 +50,8 @@ public class PolarisConfigProperties {
@Value("${spring.cloud.polaris.config.port:#{'8093'}}")
private int port = 8093;
private String token;
/**
* Whether to automatically update to the spring context when the configuration file.
* is updated
@ -113,6 +115,14 @@ public class PolarisConfigProperties {
this.port = port;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public boolean isAutoRefresh() {
return autoRefresh;
}
@ -168,4 +178,21 @@ public class PolarisConfigProperties {
public void setLocalFileRootPath(String localFileRootPath) {
this.localFileRootPath = localFileRootPath;
}
@Override
public String toString() {
return "PolarisConfigProperties{" +
"enabled=" + enabled +
", address='" + address + '\'' +
", port=" + port +
", token='" + token + '\'' +
", autoRefresh=" + autoRefresh +
", shutdownIfConnectToConfigServerFailed=" + shutdownIfConnectToConfigServerFailed +
", preference=" + preference +
", refreshType=" + refreshType +
", groups=" + groups +
", dataSource='" + dataSource + '\'' +
", localFileRootPath='" + localFileRootPath + '\'' +
'}';
}
}

@ -22,6 +22,7 @@ import com.tencent.cloud.polaris.config.config.PolarisConfigProperties;
import com.tencent.cloud.polaris.config.tsf.controller.PolarisAdaptorTsfConfigController;
import com.tencent.cloud.polaris.context.tsf.ConditionalOnTsfEnabled;
import com.tencent.cloud.polaris.context.tsf.config.TsfCoreProperties;
import com.tencent.cloud.polaris.context.tsf.consul.TsfConsulProperties;
import com.tencent.tsf.consul.config.watch.TsfConsulConfigRefreshEventListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -71,7 +72,7 @@ public class PolarisAdaptorTsfConfigAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public TsfConfigurationModifier tsfConfigModifier(TsfCoreProperties tsfCoreProperties, PolarisConfigProperties polarisConfigProperties) {
return new TsfConfigurationModifier(tsfCoreProperties, polarisConfigProperties);
public TsfConfigurationModifier tsfConfigModifier(TsfCoreProperties tsfCoreProperties, TsfConsulProperties tsfConsulProperties, PolarisConfigProperties polarisConfigProperties) {
return new TsfConfigurationModifier(tsfCoreProperties, tsfConsulProperties, polarisConfigProperties);
}
}

@ -17,10 +17,15 @@
package com.tencent.cloud.polaris.config.tsf;
import java.util.ArrayList;
import java.util.List;
import com.tencent.cloud.common.constant.OrderConstant;
import com.tencent.cloud.polaris.config.config.ConfigFileGroup;
import com.tencent.cloud.polaris.config.config.PolarisConfigProperties;
import com.tencent.cloud.polaris.context.PolarisConfigModifier;
import com.tencent.cloud.polaris.context.tsf.config.TsfCoreProperties;
import com.tencent.cloud.polaris.context.tsf.consul.TsfConsulProperties;
import com.tencent.polaris.factory.config.ConfigurationImpl;
/**
@ -33,17 +38,36 @@ public class TsfConfigurationModifier implements PolarisConfigModifier {
private final TsfCoreProperties tsfCoreProperties;
private final TsfConsulProperties tsfConsulProperties;
private final PolarisConfigProperties polarisConfigProperties;
public TsfConfigurationModifier(TsfCoreProperties tsfCoreProperties, PolarisConfigProperties polarisConfigProperties) {
public TsfConfigurationModifier(TsfCoreProperties tsfCoreProperties, TsfConsulProperties tsfConsulProperties, PolarisConfigProperties polarisConfigProperties) {
this.tsfCoreProperties = tsfCoreProperties;
this.tsfConsulProperties = tsfConsulProperties;
this.polarisConfigProperties = polarisConfigProperties;
}
@Override
public void modify(ConfigurationImpl configuration) {
if (polarisConfigProperties != null && tsfCoreProperties != null) {
polarisConfigProperties.setEnabled(tsfCoreProperties.isTsePolarisEnable());
polarisConfigProperties.setEnabled(true);
if (!tsfCoreProperties.isTsePolarisEnable()) {
polarisConfigProperties.setDataSource("consul");
polarisConfigProperties.setAddress("http://" + tsfConsulProperties.getHost() + ":" + tsfConsulProperties.getPort());
polarisConfigProperties.setPort(tsfConsulProperties.getPort());
polarisConfigProperties.setToken(tsfConsulProperties.getAclToken());
List<ConfigFileGroup> groups = new ArrayList<>();
polarisConfigProperties.setGroups(groups);
groups.clear();
ConfigFileGroup tsfGroup = new ConfigFileGroup();
tsfGroup.setNamespace("config");
tsfGroup.setName("application");
List<String> files = new ArrayList<>();
tsfGroup.setFiles(files);
files.add(tsfCoreProperties.getTsfNamespaceId() + "/");
files.add(tsfCoreProperties.getTsfApplicationId() + "/" + tsfCoreProperties.getTsfGroupId() + "/");
}
}
}

@ -21,6 +21,13 @@
"description": "The polaris configuration server port.",
"sourceType": "com.tencent.cloud.polaris.config.config.PolarisConfigProperties"
},
{
"name": "spring.cloud.polaris.config.token",
"type": "java.lang.String",
"defaultValue": "",
"description": "The polaris configuration server token.",
"sourceType": "com.tencent.cloud.polaris.config.config.PolarisConfigProperties"
},
{
"name": "spring.cloud.polaris.config.auto-refresh",
"type": "java.lang.Boolean",

@ -79,9 +79,9 @@ public class TsfDiscoveryConfigModifier implements PolarisConfigModifier {
// namespace id
polarisDiscoveryProperties.setHeartbeatInterval(Long.valueOf(tsfHeartbeatProperties.computeHearbeatInterval()
.toStandardDuration().getMillis()).intValue());
polarisContextProperties.setNamespace(tsfDiscoveryProperties.getTsfNamespaceId());
polarisDiscoveryProperties.setNamespace(tsfDiscoveryProperties.getTsfNamespaceId());
System.setProperty("spring.cloud.polaris.namespace", tsfDiscoveryProperties.getTsfNamespaceId());
polarisContextProperties.setNamespace(tsfCoreProperties.getTsfNamespaceId());
polarisDiscoveryProperties.setNamespace(tsfCoreProperties.getTsfNamespaceId());
System.setProperty("spring.cloud.polaris.namespace", tsfCoreProperties.getTsfNamespaceId());
// application id
polarisDiscoveryProperties.setVersion(tsfDiscoveryProperties.getTsfProgVersion());
@ -134,8 +134,8 @@ public class TsfDiscoveryConfigModifier implements PolarisConfigModifier {
String appName = RegistrationUtil.getAppName(tsfDiscoveryProperties, context.getEnvironment());
metadata.put(ConsulConstant.MetadataMapKey.SERVICE_NAME_KEY, RegistrationUtil.normalizeForDns(appName));
metadata.put(ConsulConstant.MetadataMapKey.INSTANCE_ID_KEY, RegistrationUtil.getInstanceId(tsfDiscoveryProperties, context));
if (StringUtils.isNotBlank(tsfDiscoveryProperties.getAclToken())) {
serverConnectorConfig.setToken(tsfDiscoveryProperties.getAclToken());
if (StringUtils.isNotBlank(tsfConsulProperties.getAclToken())) {
serverConnectorConfig.setToken(tsfConsulProperties.getAclToken());
}
metadata.put(ConsulConstant.MetadataMapKey.TAGS_KEY, JacksonUtils.serialize2Json(RegistrationUtil.createTags(tsfDiscoveryProperties)));
if (StringUtils.isNotBlank(tsfDiscoveryProperties.getDefaultQueryTag())) {

@ -43,9 +43,6 @@ public class TsfDiscoveryProperties {
private InetUtils.HostInfo hostInfo;
@Value("${tsf_token:${consul.token:${CONSUL_TOKEN:${spring.cloud.consul.token:${SPRING_CLOUD_CONSUL_TOKEN:}}}}}")
private String aclToken;
/**
* Tags to use when registering service.
*/
@ -217,28 +214,6 @@ public class TsfDiscoveryProperties {
*/
private Boolean healthCheckTlsSkipVerify;
/**
* tsf service consul registration tags.
*
* applicationId Id
*/
@Value("${tsf_application_id:}")
private String tsfApplicationId;
/**
* tsf service consul registration tags.
*
* groupId Id
*/
@Value("${tsf_group_id:}")
private String tsfGroupId;
/**
* 使.
*/
@Value("${tsf_namespace_id:}")
private String tsfNamespaceId;
/**
* tsf service consul registration tags.
*
@ -321,14 +296,6 @@ public class TsfDiscoveryProperties {
this.hostInfo = hostInfo;
}
public String getAclToken() {
return aclToken;
}
public void setAclToken(String aclToken) {
this.aclToken = aclToken;
}
public List<String> getTags() {
return tags;
}
@ -586,30 +553,6 @@ public class TsfDiscoveryProperties {
this.healthCheckTlsSkipVerify = healthCheckTlsSkipVerify;
}
public String getTsfApplicationId() {
return tsfApplicationId;
}
public void setTsfApplicationId(final String tsfApplicationId) {
this.tsfApplicationId = tsfApplicationId;
}
public String getTsfGroupId() {
return tsfGroupId;
}
public void setTsfGroupId(final String tsfGroupId) {
this.tsfGroupId = tsfGroupId;
}
public String getTsfNamespaceId() {
return tsfNamespaceId;
}
public void setTsfNamespaceId(String tsfNamespaceId) {
this.tsfNamespaceId = tsfNamespaceId;
}
public String getTsfProgVersion() {
return tsfProgVersion;
}
@ -686,7 +629,6 @@ public class TsfDiscoveryProperties {
public String toString() {
return "ConsulDiscoveryProperties{" +
"hostInfo=" + hostInfo +
", aclToken='" + aclToken + '\'' +
", tags=" + tags +
", enabled=" + enabled +
", managementTags=" + managementTags +

@ -19,6 +19,7 @@ package com.tencent.cloud.polaris.tsf.registry;
import com.tencent.cloud.polaris.context.PolarisSDKContextManager;
import com.tencent.cloud.polaris.context.tsf.ConditionalOnTsfEnabled;
import com.tencent.cloud.polaris.context.tsf.config.TsfCoreProperties;
import com.tencent.cloud.polaris.registry.PolarisServiceRegistryAutoConfiguration;
import com.tencent.cloud.polaris.tsf.TsfDiscoveryProperties;
import com.tencent.cloud.polaris.tsf.TsfHeartbeatProperties;
@ -43,10 +44,12 @@ import org.springframework.context.annotation.Configuration;
@ConditionalOnTsfEnabled
@AutoConfigureBefore(PolarisServiceRegistryAutoConfiguration.class)
public class TsfDiscoveryRegistryAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public TsfMetadataPolarisRegistrationCustomizer tsfMetadataPolarisRegistrationCustomizer(TsfDiscoveryProperties tsfDiscoveryProperties) {
return new TsfMetadataPolarisRegistrationCustomizer(tsfDiscoveryProperties);
public TsfMetadataPolarisRegistrationCustomizer tsfMetadataPolarisRegistrationCustomizer(
TsfCoreProperties tsfCoreProperties, TsfDiscoveryProperties tsfDiscoveryProperties) {
return new TsfMetadataPolarisRegistrationCustomizer(tsfCoreProperties, tsfDiscoveryProperties);
}
@Bean

@ -21,12 +21,23 @@ import java.util.Map;
import com.tencent.cloud.common.constant.SdkVersion;
import com.tencent.cloud.common.util.JacksonUtils;
import com.tencent.cloud.polaris.context.tsf.config.TsfCoreProperties;
import com.tencent.cloud.polaris.registry.PolarisRegistration;
import com.tencent.cloud.polaris.registry.PolarisRegistrationCustomizer;
import com.tencent.cloud.polaris.tsf.TsfDiscoveryProperties;
import com.tencent.cloud.polaris.tsf.consts.WarmupCons;
import com.tencent.cloud.polaris.tsf.util.RegistrationUtil;
import static com.tencent.cloud.common.tsf.TsfConstant.TSF_APPLICATION_ID;
import static com.tencent.cloud.common.tsf.TsfConstant.TSF_GROUP_ID;
import static com.tencent.cloud.common.tsf.TsfConstant.TSF_INSTNACE_ID;
import static com.tencent.cloud.common.tsf.TsfConstant.TSF_NAMESPACE_ID;
import static com.tencent.cloud.common.tsf.TsfConstant.TSF_PROG_VERSION;
import static com.tencent.cloud.common.tsf.TsfConstant.TSF_REGION;
import static com.tencent.cloud.common.tsf.TsfConstant.TSF_SDK_VERSION;
import static com.tencent.cloud.common.tsf.TsfConstant.TSF_TAGS;
import static com.tencent.cloud.common.tsf.TsfConstant.TSF_ZONE;
/**
*
*
@ -34,9 +45,12 @@ import com.tencent.cloud.polaris.tsf.util.RegistrationUtil;
*/
public class TsfMetadataPolarisRegistrationCustomizer implements PolarisRegistrationCustomizer {
private final TsfCoreProperties tsfCoreProperties;
private final TsfDiscoveryProperties tsfDiscoveryProperties;
public TsfMetadataPolarisRegistrationCustomizer(TsfDiscoveryProperties tsfDiscoveryProperties) {
public TsfMetadataPolarisRegistrationCustomizer(TsfCoreProperties tsfCoreProperties, TsfDiscoveryProperties tsfDiscoveryProperties) {
this.tsfCoreProperties = tsfCoreProperties;
this.tsfDiscoveryProperties = tsfDiscoveryProperties;
}
@ -44,17 +58,17 @@ public class TsfMetadataPolarisRegistrationCustomizer implements PolarisRegistra
public void customize(PolarisRegistration registration) {
Map<String, String> metadata = registration.getMetadata();
metadata.put("TSF_APPLICATION_ID", tsfDiscoveryProperties.getTsfApplicationId());
metadata.put("TSF_PROG_VERSION", tsfDiscoveryProperties.getTsfProgVersion());
metadata.put("TSF_GROUP_ID", tsfDiscoveryProperties.getTsfGroupId());
metadata.put("TSF_NAMESPACE_ID", tsfDiscoveryProperties.getTsfNamespaceId());
metadata.put("TSF_INSTNACE_ID", tsfDiscoveryProperties.getInstanceId());
metadata.put("TSF_REGION", tsfDiscoveryProperties.getTsfRegion());
metadata.put("TSF_ZONE", tsfDiscoveryProperties.getTsfZone());
metadata.put(TSF_APPLICATION_ID, tsfCoreProperties.getTsfApplicationId());
metadata.put(TSF_PROG_VERSION, tsfDiscoveryProperties.getTsfProgVersion());
metadata.put(TSF_GROUP_ID, tsfCoreProperties.getTsfGroupId());
metadata.put(TSF_NAMESPACE_ID, tsfCoreProperties.getTsfNamespaceId());
metadata.put(TSF_INSTNACE_ID, tsfDiscoveryProperties.getInstanceId());
metadata.put(TSF_REGION, tsfDiscoveryProperties.getTsfRegion());
metadata.put(TSF_ZONE, tsfDiscoveryProperties.getTsfZone());
// 处理预热相关的参数
metadata.put(WarmupCons.TSF_START_TIME, String.valueOf(System.currentTimeMillis()));
metadata.put("TSF_SDK_VERSION", SdkVersion.get());
metadata.put("TSF_TAGS", JacksonUtils.serialize2Json(RegistrationUtil.createTags(tsfDiscoveryProperties)));
metadata.put(TSF_SDK_VERSION, SdkVersion.get());
metadata.put(TSF_TAGS, JacksonUtils.serialize2Json(RegistrationUtil.createTags(tsfDiscoveryProperties)));
RegistrationUtil.appendMetaIpAddress(metadata);
}
}

@ -0,0 +1,73 @@
/*
* Tencent is pleased to support the open source community by making Spring Cloud Tencent available.
*
* Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
*
* Licensed under the BSD 3-Clause License (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://opensource.org/licenses/BSD-3-Clause
*
* Unless required by applicable law or agreed to in writing, software distributed
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package com.tencent.cloud.common.tsf;
/**
* Constant for TSF.
*
* @author Haotian Zhang
*/
public final class TsfConstant {
/**
* tsf application id.
*/
public static String TSF_APPLICATION_ID = "TSF_APPLICATION_ID";
/**
* tsf program version.
*/
public static String TSF_PROG_VERSION = "TSF_PROG_VERSION";
/**
* tsf group id.
*/
public static String TSF_GROUP_ID = "TSF_GROUP_ID";
/**
* tsf namespace id.
*/
public static String TSF_NAMESPACE_ID = "TSF_NAMESPACE_ID";
/**
* tsf instance id.
*/
public static String TSF_INSTNACE_ID = "TSF_INSTNACE_ID";
/**
* tsf region.
*/
public static String TSF_REGION = "TSF_REGION";
/**
* tsf zone.
*/
public static String TSF_ZONE = "TSF_ZONE";
/**
* tsf SDK version.
*/
public static String TSF_SDK_VERSION = "TSF_SDK_VERSION";
/**
* tsf tags.
*/
public static String TSF_TAGS = "TSF_TAGS";
private TsfConstant() {
}
}

@ -162,18 +162,6 @@ public class PolarisSDKContextManager {
initConfig();
}
/**
* Used for config data.
*/
public static void setConfigSDKContext(SDKContext context) {
if (configSDKContext == null) {
configSDKContext = context;
// add shutdown hook
Runtime.getRuntime().addShutdownHook(new Thread(PolarisSDKContextManager::innerConfigDestroy));
LOG.info("create Polaris config SDK context successfully.");
}
}
public SDKContext getSDKContext() {
initService();
return serviceSdkContext;
@ -218,11 +206,30 @@ public class PolarisSDKContextManager {
return configSDKContext;
}
/**
* Used for config data.
*/
public static void setConfigSDKContext(SDKContext context) {
if (configSDKContext == null) {
configSDKContext = context;
// add shutdown hook
Runtime.getRuntime().addShutdownHook(new Thread(PolarisSDKContextManager::innerConfigDestroy));
LOG.info("create Polaris config SDK context successfully.");
}
}
public void initService() {
if (null == serviceSdkContext) {
try {
// get modifiers for service.
List<PolarisConfigModifier> serviceModifierList = new ArrayList<>();
for (PolarisConfigModifier modifier : modifierList) {
if (!(modifier instanceof PolarisConfigurationConfigModifier)) {
serviceModifierList.add(modifier);
}
}
// init SDKContext
serviceSdkContext = SDKContext.initContextByConfig(properties.configuration(modifierList,
serviceSdkContext = SDKContext.initContextByConfig(properties.configuration(serviceModifierList,
() -> environment.getProperty("spring.cloud.client.ip-address"),
() -> environment.getProperty("spring.cloud.polaris.local-port", Integer.class, 0)));
serviceSdkContext.init();

@ -37,6 +37,28 @@ public class TsfCoreProperties {
@Value("${tse_polaris_enable:false}")
private boolean tsePolarisEnable = false;
/**
* tsf service consul registration tags.
* <p>
* applicationId Id
*/
@Value("${tsf_application_id:}")
private String tsfApplicationId;
/**
* tsf service consul registration tags.
* <p>
* groupId Id
*/
@Value("${tsf_group_id:}")
private String tsfGroupId;
/**
* 使.
*/
@Value("${tsf_namespace_id:}")
private String tsfNamespaceId;
public String getTsePolarisIp() {
return tsePolarisIp;
}
@ -61,12 +83,39 @@ public class TsfCoreProperties {
this.tsePolarisEnable = tsePolarisEnable;
}
public String getTsfApplicationId() {
return tsfApplicationId;
}
public void setTsfApplicationId(final String tsfApplicationId) {
this.tsfApplicationId = tsfApplicationId;
}
public String getTsfGroupId() {
return tsfGroupId;
}
public void setTsfGroupId(final String tsfGroupId) {
this.tsfGroupId = tsfGroupId;
}
public String getTsfNamespaceId() {
return tsfNamespaceId;
}
public void setTsfNamespaceId(String tsfNamespaceId) {
this.tsfNamespaceId = tsfNamespaceId;
}
@Override
public String toString() {
return "TsfCoreProperties{" +
"tsePolarisIp='" + tsePolarisIp + '\'' +
", tsfConsulEnable=" + tsfConsulEnable +
", tsePolarisEnable=" + tsePolarisEnable +
", tsfApplicationId='" + tsfApplicationId + '\'' +
", tsfGroupId='" + tsfGroupId + '\'' +
", tsfNamespaceId='" + tsfNamespaceId + '\'' +
'}';
}
}

@ -53,6 +53,9 @@ public class TsfConsulProperties {
@Value("${tsf_consul_ttl_read_timeout:5000}")
private int ttlReadTimeout = 5000; // default 5s
@Value("${tsf_token:${consul.token:${CONSUL_TOKEN:${spring.cloud.consul.token:${SPRING_CLOUD_CONSUL_TOKEN:}}}}}")
private String aclToken;
public String getHost() {
return host;
}
@ -93,15 +96,23 @@ public class TsfConsulProperties {
this.ttlReadTimeout = ttlReadTimeout;
}
public String getAclToken() {
return aclToken;
}
public void setAclToken(String aclToken) {
this.aclToken = aclToken;
}
@Override
public String toString() {
return "ConsulProperties{" +
return "TsfConsulProperties{" +
"host='" + host + '\'' +
", scheme='" + scheme + '\'' +
", port=" + port +
", enabled=" + enabled +
", ttlReadTimeout=" + ttlReadTimeout +
", aclToken='" + aclToken + '\'' +
'}';
}
}

@ -21,10 +21,12 @@ import java.util.HashMap;
import java.util.Map;
import com.tencent.polaris.api.utils.StringUtils;
import org.apache.commons.logging.Log;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.boot.logging.DeferredLogFactory;
import org.springframework.core.Ordered;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MapPropertySource;
@ -34,13 +36,19 @@ import org.springframework.core.env.MapPropertySource;
*
* @author Haotian Zhang
*/
public class TsfCoreEnvironmentPostProcessor implements EnvironmentPostProcessor, Ordered {
public final class TsfCoreEnvironmentPostProcessor implements EnvironmentPostProcessor, Ordered {
/**
* run before {@link ConfigDataEnvironmentPostProcessor}.
*/
public static final int ORDER = ConfigDataEnvironmentPostProcessor.ORDER - 1;
private final Log LOGGER;
private TsfCoreEnvironmentPostProcessor(DeferredLogFactory logFactory) {
this.LOGGER = logFactory.getLog(getClass());
}
@Override
public int getOrder() {
return ORDER;
@ -52,9 +60,58 @@ public class TsfCoreEnvironmentPostProcessor implements EnvironmentPostProcessor
if (StringUtils.isNotBlank(tsfAppId)) {
Map<String, Object> defaultProperties = new HashMap<>();
// TODO 接入consul配置后需要改动这个选项的判断
// tsf_application_id
String tsfApplicationId = environment.getProperty("tsf_application_id");
if (StringUtils.isBlank(tsfApplicationId)) {
LOGGER.error("tsf_application_id is empty");
}
// tsf_group_id
String tsfGroupId = environment.getProperty("tsf_group_id");
if (StringUtils.isBlank(tsfGroupId)) {
LOGGER.error("tsf_group_id is empty");
}
// tsf_namespace_id
String tsfNamespaceId = environment.getProperty("tsf_namespace_id");
if (StringUtils.isBlank(tsfNamespaceId)) {
LOGGER.error("tsf_namespace_id is empty");
}
// tsf_consul_ip
String tsfConsulIp = environment.getProperty("tsf_consul_ip");
if (StringUtils.isBlank(tsfConsulIp)) {
LOGGER.error("tsf_consul_ip is empty");
}
// tsf_consul_port
String tsfConsulPort = environment.getProperty("tsf_consul_port");
if (StringUtils.isBlank(tsfConsulPort)) {
LOGGER.error("tsf_consul_port is empty");
}
// tsf_token
String tsfConsulToken = environment.getProperty("tsf_token");
if (StringUtils.isBlank(tsfConsulToken)) {
LOGGER.error("tsf_token is empty");
}
// tse_polaris_enable
defaultProperties.put("spring.cloud.polaris.config.enabled", environment.getProperty("tse_polaris_enable", "false"));
String tsePolarisEnable = environment.getProperty("tse_polaris_enable", "false");
if (StringUtils.equals(tsePolarisEnable, "true")) {
defaultProperties.put("spring.cloud.polaris.config.enabled", "true");
}
else {
defaultProperties.put("spring.cloud.polaris.config.enabled", "true");
defaultProperties.put("spring.cloud.polaris.config.data-source", "consul");
defaultProperties.put("spring.cloud.polaris.config.address", "http://" + tsfConsulIp + ":" + tsfConsulPort);
defaultProperties.put("spring.cloud.polaris.config.port", tsfConsulPort);
defaultProperties.put("spring.cloud.polaris.config.token", tsfConsulToken);
defaultProperties.put("spring.cloud.polaris.config.groups[0].namespace", "config");
defaultProperties.put("spring.cloud.polaris.config.groups[0].name", "application");
defaultProperties.put("spring.cloud.polaris.config.groups[0].files[0]", tsfNamespaceId + "/");
defaultProperties.put("spring.cloud.polaris.config.groups[0].files[1]", tsfApplicationId + "/" + tsfGroupId + "/");
}
// tse_polaris_ip
defaultProperties.put("spring.cloud.polaris.address", "grpc://" + environment.getProperty("tse_polaris_ip", "") + ":8091");

Loading…
Cancel
Save