From ae5f25f22dcaa838d7504d905d2145805301a5d8 Mon Sep 17 00:00:00 2001 From: XuDaojie Date: Thu, 8 Jul 2021 16:19:56 +0800 Subject: [PATCH 01/11] add NacosLoadBalancer --- .../pom.xml | 6 + .../cloud/nacos/balancer/NacosBalancer.java | 70 +++++++++++ .../ConditionalOnLoadBalancerNacos.java | 31 +++++ .../LoadBalancerNacosAutoConfiguration.java | 39 ++++++ .../nacos/loadbalancer/NacosLoadBalancer.java | 112 ++++++++++++++++++ .../NacosLoadBalancerClientConfiguration.java | 47 ++++++++ .../main/resources/META-INF/spring.factories | 1 + 7 files changed, 306 insertions(+) create mode 100644 spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/balancer/NacosBalancer.java create mode 100644 spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/ConditionalOnLoadBalancerNacos.java create mode 100644 spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/LoadBalancerNacosAutoConfiguration.java create mode 100644 spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NacosLoadBalancer.java create mode 100644 spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NacosLoadBalancerClientConfiguration.java diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/pom.xml b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/pom.xml index ab023806e..269c03e16 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/pom.xml +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/pom.xml @@ -93,6 +93,12 @@ true + + org.springframework.cloud + spring-cloud-loadbalancer + true + + org.springframework.boot spring-boot-starter-web diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/balancer/NacosBalancer.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/balancer/NacosBalancer.java new file mode 100644 index 000000000..03b2e9fca --- /dev/null +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/balancer/NacosBalancer.java @@ -0,0 +1,70 @@ +/* + * Copyright 2013-2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * 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.alibaba.cloud.nacos.balancer; + +import com.alibaba.nacos.api.naming.pojo.Instance; +import com.alibaba.nacos.client.naming.core.Balancer; + +import org.springframework.cloud.client.ServiceInstance; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author itmuch.com XuDaojie + * @since 2021.1 + */ +public class NacosBalancer extends Balancer { + + /** + * Choose instance by weight. + * @param instances Instance List + * @return the chosen instance + */ + public static Instance getHostByRandomWeight2(List instances) { + return getHostByRandomWeight(instances); + } + + /** + * Spring Cloud LoadBalancer Choose instance by weight. + * @param serviceInstances Instance List + * @return the chosen instance + */ + public static ServiceInstance getHostByRandomWeight3( + List serviceInstances) { + Map instanceMap = new HashMap<>(); + List nacosInstance = serviceInstances.stream().map(serviceInstance -> { + Map metadata = serviceInstance.getMetadata(); + + // see + // com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery.hostToServiceInstance() + Instance instance = new Instance(); + instance.setIp(serviceInstance.getHost()); + instance.setPort(serviceInstance.getPort()); + instance.setWeight(Double.parseDouble(metadata.get("nacos.weight"))); + instance.setHealthy(Boolean.parseBoolean(metadata.get("nacos.healthy"))); + instanceMap.put(instance, serviceInstance); + return instance; + }).collect(Collectors.toList()); + + Instance instance = getHostByRandomWeight2(nacosInstance); + return instanceMap.get(instance); + } + +} diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/ConditionalOnLoadBalancerNacos.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/ConditionalOnLoadBalancerNacos.java new file mode 100644 index 000000000..da8795386 --- /dev/null +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/ConditionalOnLoadBalancerNacos.java @@ -0,0 +1,31 @@ +/* + * Copyright 2013-2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * 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.alibaba.cloud.nacos.loadbalancer; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ ElementType.TYPE, ElementType.METHOD }) +@ConditionalOnProperty(value = "loadbalancer.nacos.default.enabled", matchIfMissing = false) +public @interface ConditionalOnLoadBalancerNacos { + +} diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/LoadBalancerNacosAutoConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/LoadBalancerNacosAutoConfiguration.java new file mode 100644 index 000000000..6482d3e2b --- /dev/null +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/LoadBalancerNacosAutoConfiguration.java @@ -0,0 +1,39 @@ +/* + * Copyright 2013-2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * 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.alibaba.cloud.nacos.loadbalancer; + +import com.alibaba.cloud.nacos.ConditionalOnNacosDiscoveryEnabled; + +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClients; +import org.springframework.cloud.loadbalancer.config.LoadBalancerAutoConfiguration; +import org.springframework.context.annotation.Configuration; + +/** + * {@link org.springframework.boot.autoconfigure.EnableAutoConfiguration + * Auto-configuration} that sets up LoadBalancer for Nacos. + */ +@Configuration(proxyBeanMethods = false) +@EnableConfigurationProperties +@ConditionalOnLoadBalancerNacos +@ConditionalOnNacosDiscoveryEnabled +@AutoConfigureBefore(LoadBalancerAutoConfiguration.class) +@LoadBalancerClients(defaultConfiguration = NacosLoadBalancerClientConfiguration.class) +public class LoadBalancerNacosAutoConfiguration { + +} diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NacosLoadBalancer.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NacosLoadBalancer.java new file mode 100644 index 000000000..cf677eeab --- /dev/null +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NacosLoadBalancer.java @@ -0,0 +1,112 @@ +/* + * Copyright 2013-2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * 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.alibaba.cloud.nacos.loadbalancer; + +import java.util.List; +import java.util.stream.Collectors; + +import com.alibaba.cloud.commons.lang.StringUtils; +import com.alibaba.cloud.nacos.NacosDiscoveryProperties; +import com.alibaba.cloud.nacos.balancer.NacosBalancer; +import com.alibaba.nacos.client.naming.utils.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import reactor.core.publisher.Mono; + +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.loadbalancer.DefaultResponse; +import org.springframework.cloud.client.loadbalancer.EmptyResponse; +import org.springframework.cloud.client.loadbalancer.Request; +import org.springframework.cloud.client.loadbalancer.Response; +import org.springframework.cloud.loadbalancer.core.NoopServiceInstanceListSupplier; +import org.springframework.cloud.loadbalancer.core.ReactorServiceInstanceLoadBalancer; +import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier; + +/** + * see original. + * {@link org.springframework.cloud.loadbalancer.core.RoundRobinLoadBalancer} + * + * @author XuDaojie + * @since 2021.1 + */ +public class NacosLoadBalancer implements ReactorServiceInstanceLoadBalancer { + + private static final Logger log = LoggerFactory.getLogger(NacosLoadBalancer.class); + + private final String serviceId; + + private ObjectProvider serviceInstanceListSupplierProvider; + + private final NacosDiscoveryProperties nacosDiscoveryProperties; + + public NacosLoadBalancer( + ObjectProvider serviceInstanceListSupplierProvider, + String serviceId, NacosDiscoveryProperties nacosDiscoveryProperties) { + this.serviceId = serviceId; + this.serviceInstanceListSupplierProvider = serviceInstanceListSupplierProvider; + this.nacosDiscoveryProperties = nacosDiscoveryProperties; + } + + @Override + public Mono> choose(Request request) { + ServiceInstanceListSupplier supplier = serviceInstanceListSupplierProvider + .getIfAvailable(NoopServiceInstanceListSupplier::new); + return supplier.get().next().map(this::getInstanceResponse); + } + + private Response getInstanceResponse( + List serviceInstances) { + if (serviceInstances.isEmpty()) { + log.warn("No servers available for service: " + this.serviceId); + return new EmptyResponse(); + } + + try { + String clusterName = this.nacosDiscoveryProperties.getClusterName(); + + List instancesToChoose = serviceInstances; + if (StringUtils.isNotBlank(clusterName)) { + List sameClusterInstances = serviceInstances.stream() + .filter(serviceInstance -> { + String cluster = serviceInstance.getMetadata() + .get("nacos.cluster"); + return StringUtils.equals(cluster, clusterName); + }).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(sameClusterInstances)) { + instancesToChoose = sameClusterInstances; + } + } + else { + log.warn( + "A cross-cluster call occurs,name = {}, clusterName = {}, instance = {}", + serviceId, clusterName, serviceInstances); + } + + ServiceInstance instance = NacosBalancer + .getHostByRandomWeight3(instancesToChoose); + + return new DefaultResponse(instance); + } + catch (Exception e) { + log.warn("NacosLoadBalancer error", e); + return null; + } + + } + +} diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NacosLoadBalancerClientConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NacosLoadBalancerClientConfiguration.java new file mode 100644 index 000000000..8481909a4 --- /dev/null +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NacosLoadBalancerClientConfiguration.java @@ -0,0 +1,47 @@ +/* + * Copyright 2013-2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * 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.alibaba.cloud.nacos.loadbalancer; + +import com.alibaba.cloud.nacos.NacosDiscoveryProperties; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer; +import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier; +import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.core.env.Environment; + +/** + * @author XuDaojie + * @since 2021.1 + */ +public class NacosLoadBalancerClientConfiguration { + + @Bean + @ConditionalOnMissingBean + public ReactorLoadBalancer nacosLoadBalancer(Environment environment, + LoadBalancerClientFactory loadBalancerClientFactory, + NacosDiscoveryProperties nacosDiscoveryProperties) { + String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME); + return new NacosLoadBalancer( + loadBalancerClientFactory.getLazyProvider(name, + ServiceInstanceListSupplier.class), + name, nacosDiscoveryProperties); + } + +} diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/resources/META-INF/spring.factories b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/resources/META-INF/spring.factories index 48ae045ee..6d42f47f5 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/resources/META-INF/spring.factories @@ -5,6 +5,7 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration,\ com.alibaba.cloud.nacos.discovery.reactive.NacosReactiveDiscoveryClientConfiguration,\ com.alibaba.cloud.nacos.discovery.configclient.NacosConfigServerAutoConfiguration,\ + com.alibaba.cloud.nacos.loadbalancer.LoadBalancerNacosAutoConfiguration,\ com.alibaba.cloud.nacos.NacosServiceAutoConfiguration org.springframework.cloud.bootstrap.BootstrapConfiguration=\ com.alibaba.cloud.nacos.discovery.configclient.NacosDiscoveryClientConfigServiceBootstrapConfiguration From 35a67497c0c4b1d754edfe6a9c24a128f8777c2d Mon Sep 17 00:00:00 2001 From: XuDaojie Date: Thu, 8 Jul 2021 16:52:28 +0800 Subject: [PATCH 02/11] update nacos-discovery-consumer-sclb-example --- .../examples/ConsumerSCLBApplication.java | 21 ++++++++++++++----- .../src/main/resources/application.properties | 2 ++ .../cloud/examples/ProviderApplication.java | 15 +++++++++++++ 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/java/com/alibaba/cloud/examples/ConsumerSCLBApplication.java b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/java/com/alibaba/cloud/examples/ConsumerSCLBApplication.java index 4047df840..cec5525c5 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/java/com/alibaba/cloud/examples/ConsumerSCLBApplication.java +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/java/com/alibaba/cloud/examples/ConsumerSCLBApplication.java @@ -16,17 +16,14 @@ package com.alibaba.cloud.examples; -import java.util.List; -import java.util.Random; - import com.alibaba.cloud.examples.ConsumerSCLBApplication.EchoService; import com.alibaba.cloud.sentinel.annotation.SentinelRestTemplate; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import reactor.core.publisher.Mono; - import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.ServiceInstance; @@ -50,6 +47,11 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; +import java.util.List; +import java.util.Random; + +import reactor.core.publisher.Mono; + /** * @author Jim */ @@ -161,12 +163,21 @@ public class ConsumerSCLBApplication { @Autowired private DiscoveryClient discoveryClient; + @Value("${spring.cloud.loadbalancer.zone:null}") + private String zone; + @GetMapping("/echo-rest/{str}") public String rest(@PathVariable String str) { return restTemplate.getForObject("http://service-provider/echo/" + str, String.class); } + @GetMapping("/zone") + public String zone() { + return "consumer zone " + zone + "\n" + restTemplate + .getForObject("http://service-provider/zone", String.class); + } + @GetMapping("/echo-feign/{str}") public String feign(@PathVariable String str) { return echoService.echo(str); diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/resources/application.properties b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/resources/application.properties index 656e35c52..b695d1763 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/resources/application.properties +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/resources/application.properties @@ -7,6 +7,8 @@ spring.cloud.nacos.username=nacos spring.cloud.nacos.password=nacos spring.cloud.loadbalancer.ribbon.enabled=false +spring.cloud.loadbalancer.configurations=zone-preference +spring.cloud.loadbalancer.zone=hangzhou feign.sentinel.enabled=true diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/src/main/java/com/alibaba/cloud/examples/ProviderApplication.java b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/src/main/java/com/alibaba/cloud/examples/ProviderApplication.java index 94a842598..aea78447d 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/src/main/java/com/alibaba/cloud/examples/ProviderApplication.java +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/src/main/java/com/alibaba/cloud/examples/ProviderApplication.java @@ -16,6 +16,12 @@ package com.alibaba.cloud.examples; +import java.util.Map; + +import javax.annotation.Resource; + +import com.alibaba.cloud.nacos.NacosDiscoveryProperties; + import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @@ -40,6 +46,9 @@ public class ProviderApplication { @RestController class EchoController { + @Resource + private NacosDiscoveryProperties nacosDiscoveryProperties; + @GetMapping("/") public ResponseEntity index() { return new ResponseEntity("index error", HttpStatus.INTERNAL_SERVER_ERROR); @@ -71,6 +80,12 @@ public class ProviderApplication { return String.valueOf(a / b); } + @GetMapping("/zone") + public String zone() { + Map metadata = nacosDiscoveryProperties.getMetadata(); + return "provider zone " + metadata.get("zone"); + } + } } From cf13c1cfe8fd32ca84605a612a33e5291de5e17b Mon Sep 17 00:00:00 2001 From: XuDaojie Date: Thu, 8 Jul 2021 17:03:10 +0800 Subject: [PATCH 03/11] format code --- .../cloud/examples/ConsumerSCLBApplication.java | 11 +++++------ .../alibaba/cloud/nacos/balancer/NacosBalancer.java | 10 +++++----- .../loadbalancer/ConditionalOnLoadBalancerNacos.java | 4 ++-- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/java/com/alibaba/cloud/examples/ConsumerSCLBApplication.java b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/java/com/alibaba/cloud/examples/ConsumerSCLBApplication.java index cec5525c5..8ea51fe4e 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/java/com/alibaba/cloud/examples/ConsumerSCLBApplication.java +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/java/com/alibaba/cloud/examples/ConsumerSCLBApplication.java @@ -16,11 +16,15 @@ package com.alibaba.cloud.examples; +import java.util.List; +import java.util.Random; + import com.alibaba.cloud.examples.ConsumerSCLBApplication.EchoService; import com.alibaba.cloud.sentinel.annotation.SentinelRestTemplate; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import reactor.core.publisher.Mono; + import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -47,11 +51,6 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; -import java.util.List; -import java.util.Random; - -import reactor.core.publisher.Mono; - /** * @author Jim */ diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/balancer/NacosBalancer.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/balancer/NacosBalancer.java index 03b2e9fca..743b21b3a 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/balancer/NacosBalancer.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/balancer/NacosBalancer.java @@ -16,16 +16,16 @@ package com.alibaba.cloud.nacos.balancer; -import com.alibaba.nacos.api.naming.pojo.Instance; -import com.alibaba.nacos.client.naming.core.Balancer; - -import org.springframework.cloud.client.ServiceInstance; - import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import com.alibaba.nacos.api.naming.pojo.Instance; +import com.alibaba.nacos.client.naming.core.Balancer; + +import org.springframework.cloud.client.ServiceInstance; + /** * @author itmuch.com XuDaojie * @since 2021.1 diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/ConditionalOnLoadBalancerNacos.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/ConditionalOnLoadBalancerNacos.java index da8795386..f691aa881 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/ConditionalOnLoadBalancerNacos.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/ConditionalOnLoadBalancerNacos.java @@ -16,13 +16,13 @@ package com.alibaba.cloud.nacos.loadbalancer; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; - import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; + @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.TYPE, ElementType.METHOD }) @ConditionalOnProperty(value = "loadbalancer.nacos.default.enabled", matchIfMissing = false) From 2f53fcbfce61e8f27f5b53ecdcee82d1c600b9ff Mon Sep 17 00:00:00 2001 From: XuDaojie Date: Thu, 8 Jul 2021 17:34:57 +0800 Subject: [PATCH 04/11] update nacos-discovery.adoc --- .gitignore | 3 ++ .../src/main/asciidoc-zh/nacos-discovery.adoc | 35 ++++++++++++++++++- .../src/main/asciidoc/nacos-discovery.adoc | 34 +++++++++++++++++- 3 files changed, 70 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index a6bd7fbea..459a01ca3 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,6 @@ target # Maven ignore .flattened-pom.xml + +# AsciiDoc +spring-cloud-alibaba-docs/**/*.html diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-discovery.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-discovery.adoc index 3457e2a86..9feb3ce96 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-discovery.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-discovery.adoc @@ -291,6 +291,39 @@ Endpoint 暴露的 json 中包含了两种属性: } ---- +=== 如何开启权重路由 + +==== Spring Cloud Loadbalancer +.pom.xml +[source,xml] +---- + + + org.springframework.cloud + spring-cloud-loadbalancer + + +---- + +.application.properties +[source,properties] +---- +spring.cloud.loadbalancer.ribbon.enabled=false +---- +.Application.java +[source,java] +---- +@LoadBalancerClients(defaultConfiguration = NacosLoadBalancerClientConfiguration.class) +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} +---- + + === 关于 Nacos Discovery Starter 更多的配置项信息 更多关于 Nacos Discovery Starter 的配置项如下所示: @@ -310,7 +343,7 @@ Endpoint 暴露的 json 中包含了两种属性: |日志文件名|`spring.cloud.nacos.discovery.log-name`|| |集群|`spring.cloud.nacos.discovery.cluster-name`|`DEFAULT`|Nacos集群名称 |接入点|`spring.cloud.nacos.discovery.endpoint`||地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址 -|是否集成Ribbon|`ribbon.nacos.enabled`|`true`|一般都设置成true即可 +|是否启用NacosLoadBalancer为默认路由|`loadbalancer.nacos.default.enabled`|`false`|true: 默认路由为NacosLoadBalancer |是否开启Nacos Watch|`spring.cloud.nacos.discovery.watch.enabled`|`true`|可以设置成false来关闭 watch |=== diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc/nacos-discovery.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc/nacos-discovery.adoc index 8937bb7b9..4cc7b8fb8 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc/nacos-discovery.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc/nacos-discovery.adoc @@ -294,6 +294,38 @@ The followings shows how a service instance accesses the Endpoint: } ---- +=== Weight Route + +==== Spring Cloud Loadbalancer +.pom.xml +[source,xml] +---- + + + org.springframework.cloud + spring-cloud-loadbalancer + + +---- + +.application.properties +[source,properties] +---- +spring.cloud.loadbalancer.ribbon.enabled=false +---- +.Application.java +[source,java] +---- +@LoadBalancerClients(defaultConfiguration = NacosLoadBalancerClientConfiguration.class) +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} +---- + === More Information about Nacos Discovery Starter Configurations The following shows the other configurations of the starter of Nacos Discovery: @@ -313,7 +345,7 @@ The following shows the other configurations of the starter of Nacos Discovery: |Log file name|`spring.cloud.nacos.discovery.log-name`|| |Cluster Name|`spring.cloud.nacos.discovery.cluster-name`|`DEFAULT`|Cluster name of Nacos |Endpoint|`spring.cloud.nacos.discovery.endpoint`||The domain name of a certain service in a specific region. You can retrieve the server address dynamically with this domain name -|Integrate Ribbon or not|`ribbon.nacos.enabled`|`true`|Set to true in most cases +|Enable NacosLoadBanancer is default route|`loadbalancer.nacos.default.enabled`|`false`| |Enable Nacos Watch|`spring.cloud.nacos.discovery.watch.enabled`|`true`|set to false to close watch |=== From fbc7f9d98585084b85c1a3e73790076367f2e2cd Mon Sep 17 00:00:00 2001 From: XuDaojie Date: Fri, 9 Jul 2021 18:06:28 +0800 Subject: [PATCH 05/11] add NoneLoadBalancerCacheManager --- .../ConditionalOnLoadBalancerNacos.java | 2 +- ...ConditionalOnLoadBalancerNacosDefault.java | 31 +++++++++++++ .../LoadBalancerNacosAutoConfiguration.java | 12 ++++- .../NacosLoadBalancerClientConfiguration.java | 1 + .../NoneLoadBalancerCacheManager.java | 45 +++++++++++++++++++ 5 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/ConditionalOnLoadBalancerNacosDefault.java create mode 100644 spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NoneLoadBalancerCacheManager.java diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/ConditionalOnLoadBalancerNacos.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/ConditionalOnLoadBalancerNacos.java index f691aa881..c3176713b 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/ConditionalOnLoadBalancerNacos.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/ConditionalOnLoadBalancerNacos.java @@ -25,7 +25,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.TYPE, ElementType.METHOD }) -@ConditionalOnProperty(value = "loadbalancer.nacos.default.enabled", matchIfMissing = false) +@ConditionalOnProperty(value = "loadbalancer.nacos.enabled", matchIfMissing = true) public @interface ConditionalOnLoadBalancerNacos { } diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/ConditionalOnLoadBalancerNacosDefault.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/ConditionalOnLoadBalancerNacosDefault.java new file mode 100644 index 000000000..7f7cabdef --- /dev/null +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/ConditionalOnLoadBalancerNacosDefault.java @@ -0,0 +1,31 @@ +/* + * Copyright 2013-2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * 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.alibaba.cloud.nacos.loadbalancer; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ ElementType.TYPE, ElementType.METHOD }) +@ConditionalOnProperty(value = "loadbalancer.nacos.default.enabled", matchIfMissing = false) +public @interface ConditionalOnLoadBalancerNacosDefault { + +} diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/LoadBalancerNacosAutoConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/LoadBalancerNacosAutoConfiguration.java index 6482d3e2b..696b1a4cd 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/LoadBalancerNacosAutoConfiguration.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/LoadBalancerNacosAutoConfiguration.java @@ -19,9 +19,13 @@ package com.alibaba.cloud.nacos.loadbalancer; import com.alibaba.cloud.nacos.ConditionalOnNacosDiscoveryEnabled; import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClients; +import org.springframework.cloud.loadbalancer.cache.LoadBalancerCacheManager; import org.springframework.cloud.loadbalancer.config.LoadBalancerAutoConfiguration; +import org.springframework.cloud.loadbalancer.config.LoadBalancerCacheAutoConfiguration; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** @@ -32,8 +36,14 @@ import org.springframework.context.annotation.Configuration; @EnableConfigurationProperties @ConditionalOnLoadBalancerNacos @ConditionalOnNacosDiscoveryEnabled -@AutoConfigureBefore(LoadBalancerAutoConfiguration.class) +@AutoConfigureBefore({ LoadBalancerAutoConfiguration.class, + LoadBalancerCacheAutoConfiguration.class }) @LoadBalancerClients(defaultConfiguration = NacosLoadBalancerClientConfiguration.class) public class LoadBalancerNacosAutoConfiguration { + @Bean + @ConditionalOnMissingBean + public LoadBalancerCacheManager noneLoadBalancerCacheManager() { + return new NoneLoadBalancerCacheManager(); + } } diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NacosLoadBalancerClientConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NacosLoadBalancerClientConfiguration.java index 8481909a4..11987aa57 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NacosLoadBalancerClientConfiguration.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NacosLoadBalancerClientConfiguration.java @@ -34,6 +34,7 @@ public class NacosLoadBalancerClientConfiguration { @Bean @ConditionalOnMissingBean + @ConditionalOnLoadBalancerNacosDefault public ReactorLoadBalancer nacosLoadBalancer(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory, NacosDiscoveryProperties nacosDiscoveryProperties) { diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NoneLoadBalancerCacheManager.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NoneLoadBalancerCacheManager.java new file mode 100644 index 000000000..7e3b1d319 --- /dev/null +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NoneLoadBalancerCacheManager.java @@ -0,0 +1,45 @@ +/* + * Copyright 2013-2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * 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.alibaba.cloud.nacos.loadbalancer; + +import java.util.Collection; + +import org.springframework.cache.Cache; +import org.springframework.cloud.loadbalancer.cache.LoadBalancerCacheManager; + +/** + * Don't cache.
+ *
+ * 1. LoadBalancerCache causes information such as the weight of the service instance to + * be changed without immediate effect.
+ * 2. Nacos itself supports caching. + * + * @author XuDaojie + * @since 2021.1 + */ +public class NoneLoadBalancerCacheManager implements LoadBalancerCacheManager { + + @Override + public Cache getCache(String name) { + return null; + } + + @Override + public Collection getCacheNames() { + return null; + } +} From e4d467f359dc6b682f17d069550d0f45cb772508 Mon Sep 17 00:00:00 2001 From: XuDaojie Date: Sat, 10 Jul 2021 12:00:58 +0800 Subject: [PATCH 06/11] update loadbalancer.nacos.enabled -> spring.cloud.loadbalancer.nacos.enabled --- .../src/main/asciidoc-zh/nacos-discovery.adoc | 1 + .../src/main/asciidoc/nacos-discovery.adoc | 1 + .../loadbalancer/ConditionalOnLoadBalancerNacos.java | 2 +- .../additional-spring-configuration-metadata.json | 10 ++++++++++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-discovery.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-discovery.adoc index 9feb3ce96..e5593bb20 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-discovery.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-discovery.adoc @@ -343,6 +343,7 @@ public class Application { |日志文件名|`spring.cloud.nacos.discovery.log-name`|| |集群|`spring.cloud.nacos.discovery.cluster-name`|`DEFAULT`|Nacos集群名称 |接入点|`spring.cloud.nacos.discovery.endpoint`||地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址 +|是否集成LoadBalancer|`spring.cloud.loadbalancer.nacos.enabled`|`true`|一般都设置成true即可 |是否启用NacosLoadBalancer为默认路由|`loadbalancer.nacos.default.enabled`|`false`|true: 默认路由为NacosLoadBalancer |是否开启Nacos Watch|`spring.cloud.nacos.discovery.watch.enabled`|`true`|可以设置成false来关闭 watch |=== diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc/nacos-discovery.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc/nacos-discovery.adoc index 4cc7b8fb8..442ba31f6 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc/nacos-discovery.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc/nacos-discovery.adoc @@ -345,6 +345,7 @@ The following shows the other configurations of the starter of Nacos Discovery: |Log file name|`spring.cloud.nacos.discovery.log-name`|| |Cluster Name|`spring.cloud.nacos.discovery.cluster-name`|`DEFAULT`|Cluster name of Nacos |Endpoint|`spring.cloud.nacos.discovery.endpoint`||The domain name of a certain service in a specific region. You can retrieve the server address dynamically with this domain name +|Integrate LoadBalancer or not|`spring.cloud.loadbalancer.nacos.enabled`|`true`|Set to true in most cases |Enable NacosLoadBanancer is default route|`loadbalancer.nacos.default.enabled`|`false`| |Enable Nacos Watch|`spring.cloud.nacos.discovery.watch.enabled`|`true`|set to false to close watch |=== diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/ConditionalOnLoadBalancerNacos.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/ConditionalOnLoadBalancerNacos.java index c3176713b..963b853f6 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/ConditionalOnLoadBalancerNacos.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/ConditionalOnLoadBalancerNacos.java @@ -25,7 +25,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.TYPE, ElementType.METHOD }) -@ConditionalOnProperty(value = "loadbalancer.nacos.enabled", matchIfMissing = true) +@ConditionalOnProperty(value = "spring.cloud.loadbalancer.nacos.enabled", matchIfMissing = true) public @interface ConditionalOnLoadBalancerNacos { } diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 0987e5984..67694d1af 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -68,5 +68,15 @@ "name": "spring.cloud.nacos.password", "type": "java.lang.String", "description": "nacos password to authenticate." + }, + { + "name": "spring.cloud.loadbalancer.nacos.enabled", + "type": "java.lang.Boolean", + "description": "Integrate LoadBalancer or not." + }, + { + "name": "loadbalancer.nacos.default.enabled", + "type": "java.lang.Boolean", + "description": "enable NacosLoadBalancer is default route." } ]} From eea363bda413bdf896aebac2780a4e4d2e39379e Mon Sep 17 00:00:00 2001 From: XuDaojie Date: Sat, 10 Jul 2021 22:23:05 +0800 Subject: [PATCH 07/11] update ServiceInstanceListSupplier.builder() don't use withCache() --- .../LoadBalancerNacosAutoConfiguration.java | 13 ---- .../NacosLoadBalancerClientConfiguration.java | 74 +++++++++++++++++++ 2 files changed, 74 insertions(+), 13 deletions(-) diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/LoadBalancerNacosAutoConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/LoadBalancerNacosAutoConfiguration.java index 696b1a4cd..70d1e0084 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/LoadBalancerNacosAutoConfiguration.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/LoadBalancerNacosAutoConfiguration.java @@ -18,14 +18,8 @@ package com.alibaba.cloud.nacos.loadbalancer; import com.alibaba.cloud.nacos.ConditionalOnNacosDiscoveryEnabled; -import org.springframework.boot.autoconfigure.AutoConfigureBefore; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClients; -import org.springframework.cloud.loadbalancer.cache.LoadBalancerCacheManager; -import org.springframework.cloud.loadbalancer.config.LoadBalancerAutoConfiguration; -import org.springframework.cloud.loadbalancer.config.LoadBalancerCacheAutoConfiguration; -import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** @@ -36,14 +30,7 @@ import org.springframework.context.annotation.Configuration; @EnableConfigurationProperties @ConditionalOnLoadBalancerNacos @ConditionalOnNacosDiscoveryEnabled -@AutoConfigureBefore({ LoadBalancerAutoConfiguration.class, - LoadBalancerCacheAutoConfiguration.class }) @LoadBalancerClients(defaultConfiguration = NacosLoadBalancerClientConfiguration.class) public class LoadBalancerNacosAutoConfiguration { - @Bean - @ConditionalOnMissingBean - public LoadBalancerCacheManager noneLoadBalancerCacheManager() { - return new NoneLoadBalancerCacheManager(); - } } diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NacosLoadBalancerClientConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NacosLoadBalancerClientConfiguration.java index 11987aa57..ff93288bf 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NacosLoadBalancerClientConfiguration.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NacosLoadBalancerClientConfiguration.java @@ -18,20 +18,40 @@ package com.alibaba.cloud.nacos.loadbalancer; import com.alibaba.cloud.nacos.NacosDiscoveryProperties; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.cloud.client.ConditionalOnBlockingDiscoveryEnabled; +import org.springframework.cloud.client.ConditionalOnDiscoveryEnabled; +import org.springframework.cloud.client.ConditionalOnReactiveDiscoveryEnabled; import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.discovery.DiscoveryClient; +import org.springframework.cloud.client.discovery.ReactiveDiscoveryClient; import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer; import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier; import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory; +import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.Order; import org.springframework.core.env.Environment; /** + * {@link ServiceInstanceListSupplier} don't use cache.
+ *
+ * 1. LoadBalancerCache causes information such as the weight of the service instance to + * be changed without immediate effect.
+ * 2. Nacos itself supports caching. + * * @author XuDaojie * @since 2021.1 */ +@Configuration(proxyBeanMethods = false) +@ConditionalOnDiscoveryEnabled public class NacosLoadBalancerClientConfiguration { + private static final int REACTIVE_SERVICE_INSTANCE_SUPPLIER_ORDER = 183827465; + @Bean @ConditionalOnMissingBean @ConditionalOnLoadBalancerNacosDefault @@ -45,4 +65,58 @@ public class NacosLoadBalancerClientConfiguration { name, nacosDiscoveryProperties); } + @Configuration(proxyBeanMethods = false) + @ConditionalOnReactiveDiscoveryEnabled + @Order(REACTIVE_SERVICE_INSTANCE_SUPPLIER_ORDER) + public static class ReactiveSupportConfiguration { + + @Bean + @ConditionalOnBean(ReactiveDiscoveryClient.class) + @ConditionalOnMissingBean + @ConditionalOnProperty(value = "spring.cloud.loadbalancer.configurations", havingValue = "default", matchIfMissing = true) + public ServiceInstanceListSupplier discoveryClientServiceInstanceListSupplier( + ConfigurableApplicationContext context) { + return ServiceInstanceListSupplier.builder().withDiscoveryClient() + .build(context); + } + + @Bean + @ConditionalOnBean(ReactiveDiscoveryClient.class) + @ConditionalOnMissingBean + @ConditionalOnProperty(value = "spring.cloud.loadbalancer.configurations", havingValue = "zone-preference") + public ServiceInstanceListSupplier zonePreferenceDiscoveryClientServiceInstanceListSupplier( + ConfigurableApplicationContext context) { + return ServiceInstanceListSupplier.builder().withDiscoveryClient() + .withZonePreference().build(context); + } + + } + + @Configuration(proxyBeanMethods = false) + @ConditionalOnBlockingDiscoveryEnabled + @Order(REACTIVE_SERVICE_INSTANCE_SUPPLIER_ORDER + 1) + public static class BlockingSupportConfiguration { + + @Bean + @ConditionalOnBean(DiscoveryClient.class) + @ConditionalOnMissingBean + @ConditionalOnProperty(value = "spring.cloud.loadbalancer.configurations", havingValue = "default", matchIfMissing = true) + public ServiceInstanceListSupplier discoveryClientServiceInstanceListSupplier( + ConfigurableApplicationContext context) { + return ServiceInstanceListSupplier.builder().withBlockingDiscoveryClient() + .build(context); + } + + @Bean + @ConditionalOnBean(DiscoveryClient.class) + @ConditionalOnMissingBean + @ConditionalOnProperty(value = "spring.cloud.loadbalancer.configurations", havingValue = "zone-preference") + public ServiceInstanceListSupplier zonePreferenceDiscoveryClientServiceInstanceListSupplier( + ConfigurableApplicationContext context) { + return ServiceInstanceListSupplier.builder().withBlockingDiscoveryClient() + .withZonePreference().build(context); + } + + } + } From 914e86fa21a963e9b26e7ac3ac6b606d0b360b90 Mon Sep 17 00:00:00 2001 From: XuDaojie Date: Sat, 10 Jul 2021 22:32:52 +0800 Subject: [PATCH 08/11] remove NoneLoadBalancerCacheManager.java --- .../NoneLoadBalancerCacheManager.java | 45 ------------------- 1 file changed, 45 deletions(-) delete mode 100644 spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NoneLoadBalancerCacheManager.java diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NoneLoadBalancerCacheManager.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NoneLoadBalancerCacheManager.java deleted file mode 100644 index 7e3b1d319..000000000 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NoneLoadBalancerCacheManager.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2013-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * 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.alibaba.cloud.nacos.loadbalancer; - -import java.util.Collection; - -import org.springframework.cache.Cache; -import org.springframework.cloud.loadbalancer.cache.LoadBalancerCacheManager; - -/** - * Don't cache.
- *
- * 1. LoadBalancerCache causes information such as the weight of the service instance to - * be changed without immediate effect.
- * 2. Nacos itself supports caching. - * - * @author XuDaojie - * @since 2021.1 - */ -public class NoneLoadBalancerCacheManager implements LoadBalancerCacheManager { - - @Override - public Cache getCache(String name) { - return null; - } - - @Override - public Collection getCacheNames() { - return null; - } -} From 3c769a9ba7388f5633b5137127a3091423dc10c0 Mon Sep 17 00:00:00 2001 From: XuDaojie Date: Sun, 11 Jul 2021 09:54:52 +0800 Subject: [PATCH 09/11] remove ConditionalOnLoadBalancerNacosDefault.java --- .../src/main/asciidoc-zh/nacos-discovery.adoc | 2 +- .../src/main/asciidoc/nacos-discovery.adoc | 2 +- ...ConditionalOnLoadBalancerNacosDefault.java | 31 ------------------- .../NacosLoadBalancerClientConfiguration.java | 1 - 4 files changed, 2 insertions(+), 34 deletions(-) delete mode 100644 spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/ConditionalOnLoadBalancerNacosDefault.java diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-discovery.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-discovery.adoc index e5593bb20..5fd9b5d55 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-discovery.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-discovery.adoc @@ -309,6 +309,7 @@ Endpoint 暴露的 json 中包含了两种属性: [source,properties] ---- spring.cloud.loadbalancer.ribbon.enabled=false +spring.cloud.loadbalancer.nacos.enabled=true ---- .Application.java [source,java] @@ -344,7 +345,6 @@ public class Application { |集群|`spring.cloud.nacos.discovery.cluster-name`|`DEFAULT`|Nacos集群名称 |接入点|`spring.cloud.nacos.discovery.endpoint`||地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址 |是否集成LoadBalancer|`spring.cloud.loadbalancer.nacos.enabled`|`true`|一般都设置成true即可 -|是否启用NacosLoadBalancer为默认路由|`loadbalancer.nacos.default.enabled`|`false`|true: 默认路由为NacosLoadBalancer |是否开启Nacos Watch|`spring.cloud.nacos.discovery.watch.enabled`|`true`|可以设置成false来关闭 watch |=== diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc/nacos-discovery.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc/nacos-discovery.adoc index 442ba31f6..6a38548b3 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc/nacos-discovery.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc/nacos-discovery.adoc @@ -312,6 +312,7 @@ The followings shows how a service instance accesses the Endpoint: [source,properties] ---- spring.cloud.loadbalancer.ribbon.enabled=false +spring.cloud.loadbalancer.nacos.enabled=true ---- .Application.java [source,java] @@ -346,7 +347,6 @@ The following shows the other configurations of the starter of Nacos Discovery: |Cluster Name|`spring.cloud.nacos.discovery.cluster-name`|`DEFAULT`|Cluster name of Nacos |Endpoint|`spring.cloud.nacos.discovery.endpoint`||The domain name of a certain service in a specific region. You can retrieve the server address dynamically with this domain name |Integrate LoadBalancer or not|`spring.cloud.loadbalancer.nacos.enabled`|`true`|Set to true in most cases -|Enable NacosLoadBanancer is default route|`loadbalancer.nacos.default.enabled`|`false`| |Enable Nacos Watch|`spring.cloud.nacos.discovery.watch.enabled`|`true`|set to false to close watch |=== diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/ConditionalOnLoadBalancerNacosDefault.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/ConditionalOnLoadBalancerNacosDefault.java deleted file mode 100644 index 7f7cabdef..000000000 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/ConditionalOnLoadBalancerNacosDefault.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2013-2018 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * 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.alibaba.cloud.nacos.loadbalancer; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; - -@Retention(RetentionPolicy.RUNTIME) -@Target({ ElementType.TYPE, ElementType.METHOD }) -@ConditionalOnProperty(value = "loadbalancer.nacos.default.enabled", matchIfMissing = false) -public @interface ConditionalOnLoadBalancerNacosDefault { - -} diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NacosLoadBalancerClientConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NacosLoadBalancerClientConfiguration.java index ff93288bf..f479e1b28 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NacosLoadBalancerClientConfiguration.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/NacosLoadBalancerClientConfiguration.java @@ -54,7 +54,6 @@ public class NacosLoadBalancerClientConfiguration { @Bean @ConditionalOnMissingBean - @ConditionalOnLoadBalancerNacosDefault public ReactorLoadBalancer nacosLoadBalancer(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory, NacosDiscoveryProperties nacosDiscoveryProperties) { From f0edd0f820562ad73f99d9217cea75dc01dfb94e Mon Sep 17 00:00:00 2001 From: XuDaojie Date: Sun, 11 Jul 2021 10:19:59 +0800 Subject: [PATCH 10/11] update nacos-dicovery.additional-spring-configuration-metadata.json --- .../META-INF/additional-spring-configuration-metadata.json | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 67694d1af..03bf18030 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -72,11 +72,7 @@ { "name": "spring.cloud.loadbalancer.nacos.enabled", "type": "java.lang.Boolean", + "defaultValue": true, "description": "Integrate LoadBalancer or not." - }, - { - "name": "loadbalancer.nacos.default.enabled", - "type": "java.lang.Boolean", - "description": "enable NacosLoadBalancer is default route." } ]} From 9eb5233dcb2d3a2b405e93e7902801e25b096ef5 Mon Sep 17 00:00:00 2001 From: XuDaojie Date: Mon, 12 Jul 2021 13:55:19 +0800 Subject: [PATCH 11/11] update nacos-discovery default don't use NacosLoadBalancer --- .../src/main/asciidoc-zh/nacos-discovery.adoc | 15 +-------------- .../src/main/asciidoc/nacos-discovery.adoc | 14 +------------- .../ConditionalOnLoadBalancerNacos.java | 4 ++-- .../additional-spring-configuration-metadata.json | 2 +- 4 files changed, 5 insertions(+), 30 deletions(-) diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-discovery.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-discovery.adoc index 5fd9b5d55..f5ffff28b 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-discovery.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-discovery.adoc @@ -311,19 +311,6 @@ Endpoint 暴露的 json 中包含了两种属性: spring.cloud.loadbalancer.ribbon.enabled=false spring.cloud.loadbalancer.nacos.enabled=true ---- -.Application.java -[source,java] ----- -@LoadBalancerClients(defaultConfiguration = NacosLoadBalancerClientConfiguration.class) -@SpringBootApplication -public class Application { - - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } -} ----- - === 关于 Nacos Discovery Starter 更多的配置项信息 @@ -344,7 +331,7 @@ public class Application { |日志文件名|`spring.cloud.nacos.discovery.log-name`|| |集群|`spring.cloud.nacos.discovery.cluster-name`|`DEFAULT`|Nacos集群名称 |接入点|`spring.cloud.nacos.discovery.endpoint`||地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址 -|是否集成LoadBalancer|`spring.cloud.loadbalancer.nacos.enabled`|`true`|一般都设置成true即可 +|是否集成LoadBalancer|`spring.cloud.loadbalancer.nacos.enabled`|`false`| |是否开启Nacos Watch|`spring.cloud.nacos.discovery.watch.enabled`|`true`|可以设置成false来关闭 watch |=== diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc/nacos-discovery.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc/nacos-discovery.adoc index 6a38548b3..0d6b265cc 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc/nacos-discovery.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc/nacos-discovery.adoc @@ -314,18 +314,6 @@ The followings shows how a service instance accesses the Endpoint: spring.cloud.loadbalancer.ribbon.enabled=false spring.cloud.loadbalancer.nacos.enabled=true ---- -.Application.java -[source,java] ----- -@LoadBalancerClients(defaultConfiguration = NacosLoadBalancerClientConfiguration.class) -@SpringBootApplication -public class Application { - - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } -} ----- === More Information about Nacos Discovery Starter Configurations @@ -346,7 +334,7 @@ The following shows the other configurations of the starter of Nacos Discovery: |Log file name|`spring.cloud.nacos.discovery.log-name`|| |Cluster Name|`spring.cloud.nacos.discovery.cluster-name`|`DEFAULT`|Cluster name of Nacos |Endpoint|`spring.cloud.nacos.discovery.endpoint`||The domain name of a certain service in a specific region. You can retrieve the server address dynamically with this domain name -|Integrate LoadBalancer or not|`spring.cloud.loadbalancer.nacos.enabled`|`true`|Set to true in most cases +|Integrate LoadBalancer or not|`spring.cloud.loadbalancer.nacos.enabled`|`false`| |Enable Nacos Watch|`spring.cloud.nacos.discovery.watch.enabled`|`true`|set to false to close watch |=== diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/ConditionalOnLoadBalancerNacos.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/ConditionalOnLoadBalancerNacos.java index 963b853f6..163bdd74d 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/ConditionalOnLoadBalancerNacos.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/loadbalancer/ConditionalOnLoadBalancerNacos.java @@ -24,8 +24,8 @@ import java.lang.annotation.Target; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @Retention(RetentionPolicy.RUNTIME) -@Target({ ElementType.TYPE, ElementType.METHOD }) -@ConditionalOnProperty(value = "spring.cloud.loadbalancer.nacos.enabled", matchIfMissing = true) +@Target({ElementType.TYPE, ElementType.METHOD}) +@ConditionalOnProperty(value = "spring.cloud.loadbalancer.nacos.enabled", havingValue = "true") public @interface ConditionalOnLoadBalancerNacos { } diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 03bf18030..12a9c531c 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -72,7 +72,7 @@ { "name": "spring.cloud.loadbalancer.nacos.enabled", "type": "java.lang.Boolean", - "defaultValue": true, + "defaultValue": false, "description": "Integrate LoadBalancer or not." } ]}