From a6b201b863617b03206f4bf534d92abdcb0f56f5 Mon Sep 17 00:00:00 2001 From: lepdou Date: Thu, 21 Jul 2022 14:54:27 +0800 Subject: [PATCH] set nearby router default min level with campus --- .../config/PolarisRouterConfigModifier.java | 48 +++++++++++++++++++ .../config/RouterBootstrapConfiguration.java | 34 +++++++++++++ .../main/resources/META-INF/spring.factories | 2 + .../context/PostInitPolarisSDKContext.java | 6 +++ 4 files changed, 90 insertions(+) create mode 100644 spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisRouterConfigModifier.java create mode 100644 spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/RouterBootstrapConfiguration.java diff --git a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisRouterConfigModifier.java b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisRouterConfigModifier.java new file mode 100644 index 000000000..b8a08b4a8 --- /dev/null +++ b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisRouterConfigModifier.java @@ -0,0 +1,48 @@ +/* + * 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.polaris.router.config; + +import com.tencent.cloud.polaris.context.PolarisConfigModifier; +import com.tencent.polaris.api.config.consumer.ServiceRouterConfig; +import com.tencent.polaris.api.plugin.route.LocationLevel; +import com.tencent.polaris.factory.config.ConfigurationImpl; +import com.tencent.polaris.plugins.router.nearby.NearbyRouterConfig; + +/** + * Recover polaris router plugin default configuration. + * @author lepdou 2022-07-21 + */ +public class PolarisRouterConfigModifier implements PolarisConfigModifier { + + @Override + public void modify(ConfigurationImpl configuration) { + // set default location level with campus. + NearbyRouterConfig nearbyRouterConfig = configuration.getConsumer().getServiceRouter() + .getPluginConfig(ServiceRouterConfig.DEFAULT_ROUTER_NEARBY, NearbyRouterConfig.class); + + nearbyRouterConfig.setMatchLevel(LocationLevel.campus); + + configuration.getConsumer().getServiceRouter() + .setPluginConfig(ServiceRouterConfig.DEFAULT_ROUTER_NEARBY, nearbyRouterConfig); + } + + @Override + public int getOrder() { + return 0; + } +} diff --git a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/RouterBootstrapConfiguration.java b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/RouterBootstrapConfiguration.java new file mode 100644 index 000000000..6a59d9068 --- /dev/null +++ b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/RouterBootstrapConfiguration.java @@ -0,0 +1,34 @@ +/* + * 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.polaris.router.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Router module auto configuration at bootstrap phase. + * @author lepdou 2022-07-21 + */ +@Configuration +public class RouterBootstrapConfiguration { + + @Bean + public PolarisRouterConfigModifier polarisRouterConfigModifier() { + return new PolarisRouterConfigModifier(); + } +} diff --git a/spring-cloud-starter-tencent-polaris-router/src/main/resources/META-INF/spring.factories b/spring-cloud-starter-tencent-polaris-router/src/main/resources/META-INF/spring.factories index 3b20deb56..7ca3f2417 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-starter-tencent-polaris-router/src/main/resources/META-INF/spring.factories @@ -1,3 +1,5 @@ +org.springframework.cloud.bootstrap.BootstrapConfiguration=\ + com.tencent.cloud.polaris.router.config.RouterBootstrapConfiguration org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.tencent.cloud.polaris.router.config.RouterAutoConfiguration,\ com.tencent.cloud.polaris.router.config.FeignAutoConfiguration diff --git a/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/PostInitPolarisSDKContext.java b/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/PostInitPolarisSDKContext.java index bf41c50bd..6ddad8e89 100644 --- a/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/PostInitPolarisSDKContext.java +++ b/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/PostInitPolarisSDKContext.java @@ -23,6 +23,8 @@ import com.tencent.polaris.api.plugin.common.ValueContext; import com.tencent.polaris.api.plugin.route.LocationLevel; import com.tencent.polaris.client.api.SDKContext; import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * After all configurations are loaded, post-initialize SDKContext. @@ -30,6 +32,7 @@ import org.apache.commons.lang.StringUtils; * @author lepdou 2022-06-28 */ public class PostInitPolarisSDKContext { + private static final Logger LOGGER = LoggerFactory.getLogger(PostInitPolarisSDKContext.class); public PostInitPolarisSDKContext(SDKContext sdkContext, StaticMetadataManager staticMetadataManager) { // set instance's location info @@ -40,12 +43,15 @@ public class PostInitPolarisSDKContext { ValueContext valueContext = sdkContext.getValueContext(); if (StringUtils.isNotBlank(region)) { valueContext.setValue(LocationLevel.region.name(), region); + LOGGER.info("[SCT] init location metadata with region = " + region); } if (StringUtils.isNotBlank(zone)) { valueContext.setValue(LocationLevel.zone.name(), zone); + LOGGER.info("[SCT] init location metadata with zone = " + zone); } if (StringUtils.isNotBlank(campus)) { valueContext.setValue(LocationLevel.campus.name(), campus); + LOGGER.info("[SCT] init location metadata with campus = " + campus); } } }