diff --git a/CHANGELOG.md b/CHANGELOG.md index 877a14229..f62d98991 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,3 +9,4 @@ - [feat:support stat reporting path aggregation.](https://github.com/Tencent/spring-cloud-tencent/pull/1602) - [feat:support instance detect.](https://github.com/Tencent/spring-cloud-tencent/pull/1616) - [fix: fix loadbalancer metadata type.](https://github.com/Tencent/spring-cloud-tencent/pull/1624) +- [feat:support polaris server nearby backup LB.](https://github.com/Tencent/spring-cloud-tencent/pull/1629) diff --git a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/ConfigurationModifier.java b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/ConfigurationModifier.java index 2d3f43302..c34477fc4 100644 --- a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/ConfigurationModifier.java +++ b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/ConfigurationModifier.java @@ -114,6 +114,8 @@ private void initDataSource(ConfigurationImpl configuration) { } connectorConfig.setAddresses(configAddresses); + connectorConfig.setLbPolicy(polarisContextProperties.getAddressLbPolicy()); + connectorConfig.setServerSwitchInterval(polarisContextProperties.getServerSwitchInterval()); if (StringUtils.isNotEmpty(polarisConfigProperties.getToken())) { connectorConfig.setToken(polarisConfigProperties.getToken()); diff --git a/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/ModifyAddress.java b/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/ModifyAddress.java index a2fb63e86..2b3a62bef 100644 --- a/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/ModifyAddress.java +++ b/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/ModifyAddress.java @@ -26,6 +26,7 @@ import com.tencent.polaris.api.utils.CollectionUtils; import com.tencent.polaris.api.utils.StringUtils; import com.tencent.polaris.factory.config.ConfigurationImpl; +import com.tencent.polaris.factory.config.global.ServerConnectorConfigImpl; /** * Modify polaris server address. @@ -48,7 +49,10 @@ public void modify(ConfigurationImpl configuration) { List addresses = AddressUtils.parseAddressList(properties.getAddress()); - configuration.getGlobal().getServerConnector().setAddresses(addresses); + ServerConnectorConfigImpl serverConnectorConfig = configuration.getGlobal().getServerConnector(); + serverConnectorConfig.setAddresses(addresses); + serverConnectorConfig.setLbPolicy(properties.getAddressLbPolicy()); + serverConnectorConfig.setServerSwitchInterval(properties.getServerSwitchInterval()); if (CollectionUtils.isEmpty(configuration.getGlobal().getServerConnectors())) { configuration.getGlobal().setServerConnectors(new ArrayList<>()); } diff --git a/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/config/PolarisContextProperties.java b/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/config/PolarisContextProperties.java index d534c1e9b..283bb5464 100644 --- a/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/config/PolarisContextProperties.java +++ b/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/config/PolarisContextProperties.java @@ -26,6 +26,7 @@ import com.tencent.cloud.polaris.context.PolarisConfigModifier; import com.tencent.polaris.api.config.ConfigProvider; import com.tencent.polaris.api.config.Configuration; +import com.tencent.polaris.api.config.consumer.LoadBalanceConfig; import com.tencent.polaris.api.utils.CollectionUtils; import com.tencent.polaris.api.utils.StringUtils; import com.tencent.polaris.factory.ConfigAPIFactory; @@ -48,6 +49,16 @@ public class PolarisContextProperties { @Value("${spring.cloud.polaris.address:}") private String address; + /** + * polaris server address load balance policy. + */ + private String addressLbPolicy = LoadBalanceConfig.LOAD_BALANCE_ROUND_ROBIN; + + /** + * polaris server switch interval. + */ + private long serverSwitchInterval = 600000; + /** * current server local ip address. */ @@ -116,6 +127,22 @@ public void setAddress(String address) { this.address = address; } + public String getAddressLbPolicy() { + return addressLbPolicy; + } + + public void setAddressLbPolicy(String addressLbPolicy) { + this.addressLbPolicy = addressLbPolicy; + } + + public long getServerSwitchInterval() { + return serverSwitchInterval; + } + + public void setServerSwitchInterval(long serverSwitchInterval) { + this.serverSwitchInterval = serverSwitchInterval; + } + public String getLocalIpAddress() { return localIpAddress; } @@ -160,6 +187,8 @@ public void setService(String service) { public String toString() { return "PolarisContextProperties{" + "address='" + address + '\'' + + ", addressLbPolicy='" + addressLbPolicy + '\'' + + ", serverSwitchInterval=" + serverSwitchInterval + ", localIpAddress='" + localIpAddress + '\'' + ((this.localPort == null || this.localPort <= 0) ? "" : ", localPort=" + localPort) + ", enabled=" + enabled + diff --git a/spring-cloud-tencent-polaris-context/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-cloud-tencent-polaris-context/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 370f5b4c5..6b3c64a63 100644 --- a/spring-cloud-tencent-polaris-context/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/spring-cloud-tencent-polaris-context/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -88,5 +88,19 @@ "defaultValue": "polaris.pushgateway" } ], - "hints": [] + "hints": [ + { + "name": "spring.cloud.polaris.address-lb-policy", + "values": [ + { + "value": "roundRobin", + "description": "Round robin policy." + }, + { + "value": "nearbyBackup", + "description": "Nearby backup policy." + } + ] + } + ] }