diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceDiscoveryAutoConfiguration.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceDiscoveryAutoConfiguration.java index dd2b7d81..0211a7a9 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceDiscoveryAutoConfiguration.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceDiscoveryAutoConfiguration.java @@ -33,6 +33,7 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.function.Predicate; import java.util.stream.Stream; +import com.alibaba.cloud.nacos.NacosNamingManager; import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.listen.Listenable; import org.apache.curator.framework.listen.ListenerContainer; @@ -504,8 +505,8 @@ public class DubboServiceDiscoveryAutoConfiguration { */ private final Set listeningServices; - NacosConfiguration(NacosDiscoveryProperties nacosDiscoveryProperties) { - this.namingService = nacosDiscoveryProperties.namingServiceInstance(); + NacosConfiguration(NacosNamingManager nacosNamingManager) { + this.namingService = nacosNamingManager.getNamingService(); this.listeningServices = new ConcurrentSkipListSet<>(); } diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/java/com/alibaba/cloud/examples/Application.java b/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/java/com/alibaba/cloud/examples/Application.java index 0417ce7e..74433245 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/java/com/alibaba/cloud/examples/Application.java +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/java/com/alibaba/cloud/examples/Application.java @@ -5,6 +5,7 @@ import java.io.StringReader; import java.util.Properties; import java.util.concurrent.Executor; +import com.alibaba.cloud.nacos.NacosConfigManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.ApplicationArguments; @@ -24,7 +25,6 @@ import com.alibaba.nacos.api.config.listener.Listener; */ @SpringBootApplication public class Application { - public static void main(String[] args) { SpringApplication.run(Application.class, args); } @@ -40,14 +40,14 @@ class SampleRunner implements ApplicationRunner { int userAge; @Autowired - private NacosConfigProperties nacosConfigProperties; + private NacosConfigManager nacosConfigManager; @Override public void run(ApplicationArguments args) throws Exception { System.out.println( String.format("Initial username=%s, userAge=%d", userName, userAge)); - nacosConfigProperties.configServiceInstance().addListener( + nacosConfigManager.getConfigService().addListener( "nacos-config-example.properties", "DEFAULT_GROUP", new Listener() { /** @@ -58,7 +58,7 @@ class SampleRunner implements ApplicationRunner { * user.name=Nacos user.age=25 * * @param configInfo latest config data for specific dataId in Nacos - * server + * server */ @Override public void receiveConfigInfo(String configInfo) { diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/com/alibaba/cloud/examples/ConsumerApplication.java b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/com/alibaba/cloud/examples/ConsumerApplication.java index bd7595a0..bed219b8 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/com/alibaba/cloud/examples/ConsumerApplication.java +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/com/alibaba/cloud/examples/ConsumerApplication.java @@ -48,8 +48,8 @@ public class ConsumerApplication { String divide(@RequestParam("a") Integer a, @RequestParam("b") Integer b); default String divide(Integer a) { - return divide(a, 0); - } + return divide(a, 0); + } @GetMapping(value = "/notFound") String notFound(); diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/com/alibaba/cloud/examples/TestController.java b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/com/alibaba/cloud/examples/TestController.java index 71c4f7a7..9281e9fc 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/com/alibaba/cloud/examples/TestController.java +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/com/alibaba/cloud/examples/TestController.java @@ -71,10 +71,10 @@ public class TestController { return echoService.divide(a, b); } - @GetMapping(value = "/divide-feign2") - public String divide(@RequestParam Integer a) { - return echoService.divide(a); - } + @GetMapping(value = "/divide-feign2") + public String divide(@RequestParam Integer a) { + return echoService.divide(a); + } @GetMapping(value = "/echo-feign/{str}") public String feign(@PathVariable String str) { diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/com/alibaba/cloud/examples/UrlCleaner.java b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/com/alibaba/cloud/examples/UrlCleaner.java index 4eab398c..68d65d0b 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/com/alibaba/cloud/examples/UrlCleaner.java +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/com/alibaba/cloud/examples/UrlCleaner.java @@ -1,12 +1,12 @@ package com.alibaba.cloud.examples; public class UrlCleaner { - public static String clean(String url) { - System.out.println("enter urlCleaner"); - if (url.matches(".*/echo/.*")) { - System.out.println("change url"); - url = url.replaceAll("/echo/.*", "/echo/{str}"); - } - return url; - } + public static String clean(String url) { + System.out.println("enter urlCleaner"); + if (url.matches(".*/echo/.*")) { + System.out.println("change url"); + url = url.replaceAll("/echo/.*", "/echo/{str}"); + } + return url; + } } diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigAutoConfiguration.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigAutoConfiguration.java index 97defee2..bdc0b2d3 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigAutoConfiguration.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigAutoConfiguration.java @@ -44,6 +44,11 @@ public class NacosConfigAutoConfiguration { return new NacosConfigProperties(); } + @Bean + public NacosConfigManager nacosConfigManager() { + return new NacosConfigManager(); + } + @Bean public NacosRefreshProperties nacosRefreshProperties() { return new NacosRefreshProperties(); @@ -56,10 +61,10 @@ public class NacosConfigAutoConfiguration { @Bean public NacosContextRefresher nacosContextRefresher( - NacosConfigProperties nacosConfigProperties, + NacosConfigManager nacosConfigManager, NacosRefreshProperties nacosRefreshProperties, NacosRefreshHistory refreshHistory) { return new NacosContextRefresher(nacosRefreshProperties, refreshHistory, - nacosConfigProperties.configServiceInstance()); + nacosConfigManager.getConfigService()); } } diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigBootstrapConfiguration.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigBootstrapConfiguration.java index 081464cd..0a5712e1 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigBootstrapConfiguration.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigBootstrapConfiguration.java @@ -36,10 +36,17 @@ public class NacosConfigBootstrapConfiguration { return new NacosConfigProperties(); } + @Bean + @ConditionalOnMissingBean + public NacosConfigManager nacosConfigManager() { + return new NacosConfigManager(); + } + @Bean public NacosPropertySourceLocator nacosPropertySourceLocator( + NacosConfigManager nacosConfigManager, NacosConfigProperties nacosConfigProperties) { - return new NacosPropertySourceLocator(nacosConfigProperties); + return new NacosPropertySourceLocator(nacosConfigManager, nacosConfigProperties); } } diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigManager.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigManager.java new file mode 100644 index 00000000..4b5e98f9 --- /dev/null +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigManager.java @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 + * + * http://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; + +import com.alibaba.nacos.api.config.ConfigService; +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; + +/** + * @author liaochuntao + */ +public class NacosConfigManager implements ApplicationContextAware { + + private ConfigService configService; + + public ConfigService getConfigService() { + return configService; + } + + @Override + public void setApplicationContext(ApplicationContext applicationContext) + throws BeansException { + NacosConfigProperties properties = applicationContext + .getBean(NacosConfigProperties.class); + configService = properties.configServiceInstance(); + } +} diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigProperties.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigProperties.java index e6c6b526..d03c399f 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigProperties.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigProperties.java @@ -64,17 +64,19 @@ public class NacosConfigProperties { @Autowired private Environment environment; - + @PostConstruct public void init() { this.overrideFromEnv(); } - + private void overrideFromEnv() { if (StringUtils.isEmpty(this.getServerAddr())) { - String serverAddr = environment.resolvePlaceholders("${spring.cloud.nacos.config.server-addr:}"); - if(StringUtils.isEmpty(serverAddr)) { - serverAddr = environment.resolvePlaceholders("${spring.cloud.nacos.server-addr}"); + String serverAddr = environment + .resolvePlaceholders("${spring.cloud.nacos.config.server-addr:}"); + if (StringUtils.isEmpty(serverAddr)) { + serverAddr = environment + .resolvePlaceholders("${spring.cloud.nacos.server-addr}"); } this.setServerAddr(serverAddr); } @@ -110,25 +112,26 @@ public class NacosConfigProperties { private int timeout = 3000; /** - * nacos maximum number of tolerable server reconnection errors. - */ + * nacos maximum number of tolerable server reconnection errors. + */ private String maxRetry; /** - * nacos get config long poll timeout. - */ + * nacos get config long poll timeout. + */ private String configLongPollTimeout; /** - * nacos get config failure retry time. - */ + * nacos get config failure retry time. + */ private String configRetryTime; /** - * If you want to pull it yourself when the program starts to get the configuration for the first time, - * and the registered Listener is used for future configuration updates, you can keep the original - * code unchanged, just add the system parameter: enableRemoteSyncConfig = "true" ( But there is network overhead); - * therefore we recommend that you use {@link ConfigService#getConfigAndSignListener} directly. + * If you want to pull it yourself when the program starts to get the configuration + * for the first time, and the registered Listener is used for future configuration + * updates, you can keep the original code unchanged, just add the system parameter: + * enableRemoteSyncConfig = "true" ( But there is network overhead); therefore we + * recommend that you use {@link ConfigService#getConfigAndSignListener} directly. */ private boolean enableRemoteSyncConfig = false; @@ -163,9 +166,9 @@ public class NacosConfigProperties { */ private String clusterName; - /** - * nacos config dataId name. - */ + /** + * nacos config dataId name. + */ private String name; /** @@ -233,27 +236,27 @@ public class NacosConfigProperties { } public void setMaxRetry(String maxRetry) { - this.maxRetry = maxRetry; + this.maxRetry = maxRetry; } public String getConfigLongPollTimeout() { - return configLongPollTimeout; + return configLongPollTimeout; } public void setConfigLongPollTimeout(String configLongPollTimeout) { - this.configLongPollTimeout = configLongPollTimeout; + this.configLongPollTimeout = configLongPollTimeout; } public String getConfigRetryTime() { - return configRetryTime; + return configRetryTime; } public void setConfigRetryTime(String configRetryTime) { - this.configRetryTime = configRetryTime; + this.configRetryTime = configRetryTime; } public Boolean getEnableRemoteSyncConfig() { - return enableRemoteSyncConfig; + return enableRemoteSyncConfig; } public void setEnableRemoteSyncConfig(Boolean enableRemoteSyncConfig) { @@ -400,6 +403,7 @@ public class NacosConfigProperties { + refreshableDataids + '\'' + ", extConfig=" + extConfig + '}'; } + @Deprecated public ConfigService configServiceInstance() { if (null != configService) { @@ -415,9 +419,11 @@ public class NacosConfigProperties { properties.put(CONTEXT_PATH, Objects.toString(this.contextPath, "")); properties.put(CLUSTER_NAME, Objects.toString(this.clusterName, "")); properties.put(MAX_RETRY, Objects.toString(this.maxRetry, "")); - properties.put(CONFIG_LONG_POLL_TIMEOUT, Objects.toString(this.configLongPollTimeout, "")); + properties.put(CONFIG_LONG_POLL_TIMEOUT, + Objects.toString(this.configLongPollTimeout, "")); properties.put(CONFIG_RETRY_TIME, Objects.toString(this.configRetryTime, "")); - properties.put(ENABLE_REMOTE_SYNC_CONFIG, Objects.toString(this.enableRemoteSyncConfig, "")); + properties.put(ENABLE_REMOTE_SYNC_CONFIG, + Objects.toString(this.enableRemoteSyncConfig, "")); String endpoint = Objects.toString(this.endpoint, ""); if (endpoint.contains(":")) { diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySourceLocator.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySourceLocator.java index 77acba78..10a48cd8 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySourceLocator.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySourceLocator.java @@ -18,6 +18,7 @@ package com.alibaba.cloud.nacos.client; import java.util.List; +import com.alibaba.cloud.nacos.NacosConfigManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.bootstrap.config.PropertySourceLocator; @@ -52,14 +53,18 @@ public class NacosPropertySourceLocator implements PropertySourceLocator { private NacosConfigProperties nacosConfigProperties; - public NacosPropertySourceLocator(NacosConfigProperties nacosConfigProperties) { + private NacosConfigManager nacosConfigManager; + + public NacosPropertySourceLocator(NacosConfigManager nacosConfigManager, + NacosConfigProperties nacosConfigProperties) { + this.nacosConfigManager = nacosConfigManager; this.nacosConfigProperties = nacosConfigProperties; } @Override public PropertySource locate(Environment env) { - ConfigService configService = nacosConfigProperties.configServiceInstance(); + ConfigService configService = nacosConfigManager.getConfigService(); if (null == configService) { log.warn("no instance of config service found, can't load config from nacos"); diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpoint.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpoint.java index ba9cbaad..2594ae92 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpoint.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpoint.java @@ -42,8 +42,8 @@ public class NacosConfigEndpoint { private final NacosRefreshHistory refreshHistory; - private ThreadLocal dateFormat = ThreadLocal.withInitial(() -> - new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); + private ThreadLocal dateFormat = ThreadLocal + .withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); public NacosConfigEndpoint(NacosConfigProperties properties, NacosRefreshHistory refreshHistory) { diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpointAutoConfiguration.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpointAutoConfiguration.java index 19ded2ac..920b510d 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpointAutoConfiguration.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpointAutoConfiguration.java @@ -16,6 +16,7 @@ package com.alibaba.cloud.nacos.endpoint; +import com.alibaba.cloud.nacos.NacosConfigManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; import org.springframework.boot.actuate.endpoint.annotation.Endpoint; @@ -39,6 +40,9 @@ public class NacosConfigEndpointAutoConfiguration { @Autowired private NacosConfigProperties nacosConfigProperties; + @Autowired + private NacosConfigManager nacosConfigManager; + @Autowired private NacosRefreshHistory nacosRefreshHistory; @@ -51,6 +55,6 @@ public class NacosConfigEndpointAutoConfiguration { @Bean public NacosConfigHealthIndicator nacosConfigHealthIndicator() { - return new NacosConfigHealthIndicator(nacosConfigProperties.configServiceInstance()); + return new NacosConfigHealthIndicator(nacosConfigManager.getConfigService()); } } diff --git a/spring-cloud-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigPropertiesServerAddressBothLevelTests.java b/spring-cloud-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigPropertiesServerAddressBothLevelTests.java index b0c8691c..15e57351 100644 --- a/spring-cloud-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigPropertiesServerAddressBothLevelTests.java +++ b/spring-cloud-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigPropertiesServerAddressBothLevelTests.java @@ -20,18 +20,18 @@ import com.alibaba.cloud.nacos.endpoint.NacosConfigEndpointAutoConfiguration; @RunWith(SpringRunner.class) @SpringBootTest(classes = NacosConfigPropertiesServerAddressBothLevelTests.TestConfig.class, properties = { "spring.cloud.nacos.config.server-addr=321,321,321,321:8848", - "spring.cloud.nacos.server-addr=123.123.123.123:8848" - }, webEnvironment = RANDOM_PORT) + "spring.cloud.nacos.server-addr=123.123.123.123:8848" }, webEnvironment = RANDOM_PORT) public class NacosConfigPropertiesServerAddressBothLevelTests { @Autowired private NacosConfigProperties properties; - + @Test public void testGetServerAddr() { - assertEquals("NacosConfigProperties server address was wrong","321,321,321,321:8848", properties.getServerAddr()); + assertEquals("NacosConfigProperties server address was wrong", + "321,321,321,321:8848", properties.getServerAddr()); } - + @Configuration @EnableAutoConfiguration @ImportAutoConfiguration({ NacosConfigEndpointAutoConfiguration.class, diff --git a/spring-cloud-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigPropertiesServerAddressTopLevelTests.java b/spring-cloud-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigPropertiesServerAddressTopLevelTests.java index 7b625996..62ce114c 100644 --- a/spring-cloud-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigPropertiesServerAddressTopLevelTests.java +++ b/spring-cloud-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigPropertiesServerAddressTopLevelTests.java @@ -19,18 +19,18 @@ import com.alibaba.cloud.nacos.endpoint.NacosConfigEndpointAutoConfiguration; */ @RunWith(SpringRunner.class) @SpringBootTest(classes = NacosConfigPropertiesServerAddressTopLevelTests.TestConfig.class, properties = { - "spring.cloud.nacos.server-addr=123.123.123.123:8848" - }, webEnvironment = RANDOM_PORT) + "spring.cloud.nacos.server-addr=123.123.123.123:8848" }, webEnvironment = RANDOM_PORT) public class NacosConfigPropertiesServerAddressTopLevelTests { @Autowired private NacosConfigProperties properties; - + @Test public void testGetServerAddr() { - assertEquals("NacosConfigProperties server address was wrong","123.123.123.123:8848", properties.getServerAddr()); + assertEquals("NacosConfigProperties server address was wrong", + "123.123.123.123:8848", properties.getServerAddr()); } - + @Configuration @EnableAutoConfiguration @ImportAutoConfiguration({ NacosConfigEndpointAutoConfiguration.class, diff --git a/spring-cloud-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpointTests.java b/spring-cloud-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpointTests.java index bdde9d06..1706f338 100644 --- a/spring-cloud-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpointTests.java +++ b/spring-cloud-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/endpoint/NacosConfigEndpointTests.java @@ -22,6 +22,7 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen import java.lang.reflect.Method; import java.util.Map; +import com.alibaba.cloud.nacos.NacosConfigManager; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.api.mockito.PowerMockito; @@ -83,6 +84,9 @@ public class NacosConfigEndpointTests { @Autowired private NacosConfigProperties properties; + @Autowired + private NacosConfigManager nacosConfigManager; + @Autowired private NacosRefreshHistory refreshHistory; @@ -99,7 +103,7 @@ public class NacosConfigEndpointTests { Builder builder = new Builder(); NacosConfigHealthIndicator healthIndicator = new NacosConfigHealthIndicator( - properties.configServiceInstance()); + nacosConfigManager.getConfigService()); healthIndicator.doHealthCheck(builder); Builder builder1 = new Builder(); diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryAutoConfiguration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryAutoConfiguration.java index 180f1fa8..455853c7 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryAutoConfiguration.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryAutoConfiguration.java @@ -45,16 +45,23 @@ public class NacosDiscoveryAutoConfiguration { @Bean public NacosServiceRegistry nacosServiceRegistry( + NacosNamingManager nacosNamingManager, NacosDiscoveryProperties nacosDiscoveryProperties) { - return new NacosServiceRegistry(nacosDiscoveryProperties); + return new NacosServiceRegistry(nacosNamingManager, nacosDiscoveryProperties); + } + + @Bean + public NacosNamingManager nacosNamingManager() { + return new NacosNamingManager(); } @Bean @ConditionalOnBean(AutoServiceRegistrationProperties.class) - public NacosRegistration nacosRegistration( + public NacosRegistration nacosRegistration(NacosNamingManager nacosNamingManager, NacosDiscoveryProperties nacosDiscoveryProperties, ApplicationContext context) { - return new NacosRegistration(nacosDiscoveryProperties, context); + return new NacosRegistration(nacosNamingManager, nacosDiscoveryProperties, + context); } @Bean diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryProperties.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryProperties.java index 3826285f..85e63304 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryProperties.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryProperties.java @@ -427,7 +427,8 @@ public class NacosDiscoveryProperties { public void overrideFromEnv(Environment env) { if (StringUtils.isEmpty(this.getServerAddr())) { - String serverAddr = env.resolvePlaceholders("${spring.cloud.nacos.discovery.server-addr:}"); + String serverAddr = env + .resolvePlaceholders("${spring.cloud.nacos.discovery.server-addr:}"); if (StringUtils.isEmpty(serverAddr)) { serverAddr = env.resolvePlaceholders("${spring.cloud.nacos.server-addr}"); } @@ -459,10 +460,11 @@ public class NacosDiscoveryProperties { } if (StringUtils.isEmpty(this.getGroup())) { this.setGroup( - env.resolvePlaceholders("${spring.cloud.nacos.discovery.group:}")); + env.resolvePlaceholders("${spring.cloud.nacos.discovery.group:}")); } } + @Deprecated public NamingService namingServiceInstance() { if (null != namingService) { @@ -479,6 +481,7 @@ public class NacosDiscoveryProperties { return namingService; } + @Deprecated public NamingMaintainService namingMaintainServiceInstance() { if (null != namingMaintainService) { diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosNamingManager.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosNamingManager.java new file mode 100644 index 00000000..9bf40a45 --- /dev/null +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosNamingManager.java @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 + * + * http://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; + +import com.alibaba.nacos.api.naming.NamingMaintainService; +import com.alibaba.nacos.api.naming.NamingService; +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; + +/** + * @author liaochuntao + */ +public class NacosNamingManager implements ApplicationContextAware { + + private NamingService namingService; + private NamingMaintainService namingMaintainService; + + public NamingService getNamingService() { + return namingService; + } + + public NamingMaintainService getNamingMaintainService() { + return namingMaintainService; + } + + @Override + public void setApplicationContext(ApplicationContext applicationContext) + throws BeansException { + NacosDiscoveryProperties properties = applicationContext + .getBean(NacosDiscoveryProperties.class); + namingService = properties.namingServiceInstance(); + namingMaintainService = properties.namingMaintainServiceInstance(); + } +} diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClient.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClient.java index 71b1cafc..60c287f9 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClient.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClient.java @@ -17,6 +17,7 @@ package com.alibaba.cloud.nacos.discovery; import com.alibaba.cloud.nacos.NacosDiscoveryProperties; +import com.alibaba.cloud.nacos.NacosNamingManager; import com.alibaba.cloud.nacos.NacosServiceInstance; import com.alibaba.nacos.api.naming.pojo.Instance; import com.alibaba.nacos.api.naming.pojo.ListView; @@ -37,81 +38,86 @@ import java.util.Map; */ public class NacosDiscoveryClient implements DiscoveryClient { - private static final Logger log = LoggerFactory.getLogger(NacosDiscoveryClient.class); - public static final String DESCRIPTION = "Spring Cloud Nacos Discovery Client"; + private static final Logger log = LoggerFactory.getLogger(NacosDiscoveryClient.class); + public static final String DESCRIPTION = "Spring Cloud Nacos Discovery Client"; - private NacosDiscoveryProperties discoveryProperties; + private NacosNamingManager nacosNamingManager; + private NacosDiscoveryProperties discoveryProperties; - public NacosDiscoveryClient(NacosDiscoveryProperties discoveryProperties) { - this.discoveryProperties = discoveryProperties; - } + public NacosDiscoveryClient(NacosNamingManager nacosNamingManager, + NacosDiscoveryProperties discoveryProperties) { + this.nacosNamingManager = nacosNamingManager; + this.discoveryProperties = discoveryProperties; + } - @Override - public String description() { - return DESCRIPTION; - } + @Override + public String description() { + return DESCRIPTION; + } - @Override - public List getInstances(String serviceId) { - try { - String group = discoveryProperties.getGroup(); - List instances = discoveryProperties.namingServiceInstance() - .selectInstances(serviceId, group, true); - return hostToServiceInstanceList(instances, serviceId); - } catch (Exception e) { - throw new RuntimeException( - "Can not get hosts from nacos server. serviceId: " + serviceId, e); - } - } + @Override + public List getInstances(String serviceId) { + try { + String group = discoveryProperties.getGroup(); + List instances = nacosNamingManager.getNamingService() + .selectInstances(serviceId, group, true); + return hostToServiceInstanceList(instances, serviceId); + } + catch (Exception e) { + throw new RuntimeException( + "Can not get hosts from nacos server. serviceId: " + serviceId, e); + } + } - public static ServiceInstance hostToServiceInstance(Instance instance, - String serviceId) { - if (instance == null || !instance.isEnabled() || !instance.isHealthy()) { - return null; - } - NacosServiceInstance nacosServiceInstance = new NacosServiceInstance(); - nacosServiceInstance.setHost(instance.getIp()); - nacosServiceInstance.setPort(instance.getPort()); - nacosServiceInstance.setServiceId(serviceId); + public static ServiceInstance hostToServiceInstance(Instance instance, + String serviceId) { + if (instance == null || !instance.isEnabled() || !instance.isHealthy()) { + return null; + } + NacosServiceInstance nacosServiceInstance = new NacosServiceInstance(); + nacosServiceInstance.setHost(instance.getIp()); + nacosServiceInstance.setPort(instance.getPort()); + nacosServiceInstance.setServiceId(serviceId); - Map metadata = new HashMap<>(); - metadata.put("nacos.instanceId", instance.getInstanceId()); - metadata.put("nacos.weight", instance.getWeight() + ""); - metadata.put("nacos.healthy", instance.isHealthy() + ""); - metadata.put("nacos.cluster", instance.getClusterName() + ""); - metadata.putAll(instance.getMetadata()); - nacosServiceInstance.setMetadata(metadata); + Map metadata = new HashMap<>(); + metadata.put("nacos.instanceId", instance.getInstanceId()); + metadata.put("nacos.weight", instance.getWeight() + ""); + metadata.put("nacos.healthy", instance.isHealthy() + ""); + metadata.put("nacos.cluster", instance.getClusterName() + ""); + metadata.putAll(instance.getMetadata()); + nacosServiceInstance.setMetadata(metadata); - if (metadata.containsKey("secure")) { - boolean secure = Boolean.parseBoolean(metadata.get("secure")); - nacosServiceInstance.setSecure(secure); - } - return nacosServiceInstance; - } + if (metadata.containsKey("secure")) { + boolean secure = Boolean.parseBoolean(metadata.get("secure")); + nacosServiceInstance.setSecure(secure); + } + return nacosServiceInstance; + } - public static List hostToServiceInstanceList( - List instances, String serviceId) { - List result = new ArrayList<>(instances.size()); - for (Instance instance : instances) { - ServiceInstance serviceInstance = hostToServiceInstance(instance, serviceId); - if (serviceInstance != null) { - result.add(serviceInstance); - } - } - return result; - } + public static List hostToServiceInstanceList( + List instances, String serviceId) { + List result = new ArrayList<>(instances.size()); + for (Instance instance : instances) { + ServiceInstance serviceInstance = hostToServiceInstance(instance, serviceId); + if (serviceInstance != null) { + result.add(serviceInstance); + } + } + return result; + } - @Override - public List getServices() { + @Override + public List getServices() { - try { - String group = discoveryProperties.getGroup(); - ListView services = discoveryProperties.namingServiceInstance() - .getServicesOfServer(1, Integer.MAX_VALUE, group); - return services.getData(); - } catch (Exception e) { - log.error("get service name from nacos server fail,", e); - return Collections.emptyList(); - } - } + try { + String group = discoveryProperties.getGroup(); + ListView services = nacosNamingManager.getNamingService() + .getServicesOfServer(1, Integer.MAX_VALUE, group); + return services.getData(); + } + catch (Exception e) { + log.error("get service name from nacos server fail,", e); + return Collections.emptyList(); + } + } } diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientAutoConfiguration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientAutoConfiguration.java index 8de3bbae..2edc84be 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientAutoConfiguration.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientAutoConfiguration.java @@ -16,6 +16,7 @@ package com.alibaba.cloud.nacos.discovery; +import com.alibaba.cloud.nacos.NacosNamingManager; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -44,9 +45,9 @@ public class NacosDiscoveryClientAutoConfiguration { } @Bean - public DiscoveryClient nacosDiscoveryClient( + public DiscoveryClient nacosDiscoveryClient(NacosNamingManager nacosNamingManager, NacosDiscoveryProperties discoveryProperties) { - return new NacosDiscoveryClient(discoveryProperties); + return new NacosDiscoveryClient(nacosNamingManager, discoveryProperties); } @Bean diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosDiscoveryEndpoint.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosDiscoveryEndpoint.java index 6ea62bbb..6d38c005 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosDiscoveryEndpoint.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosDiscoveryEndpoint.java @@ -21,6 +21,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import com.alibaba.cloud.nacos.NacosNamingManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.actuate.endpoint.annotation.Endpoint; @@ -40,9 +41,12 @@ public class NacosDiscoveryEndpoint { private static final Logger log = LoggerFactory .getLogger(NacosDiscoveryEndpoint.class); + private NacosNamingManager nacosNamingManager; private NacosDiscoveryProperties nacosDiscoveryProperties; - public NacosDiscoveryEndpoint(NacosDiscoveryProperties nacosDiscoveryProperties) { + public NacosDiscoveryEndpoint(NacosNamingManager nacosNamingManager, + NacosDiscoveryProperties nacosDiscoveryProperties) { + this.nacosNamingManager = nacosNamingManager; this.nacosDiscoveryProperties = nacosDiscoveryProperties; } @@ -54,7 +58,7 @@ public class NacosDiscoveryEndpoint { Map result = new HashMap<>(); result.put("NacosDiscoveryProperties", nacosDiscoveryProperties); - NamingService namingService = nacosDiscoveryProperties.namingServiceInstance(); + NamingService namingService = nacosNamingManager.getNamingService(); List subscribe = Collections.emptyList(); try { diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosDiscoveryEndpointAutoConfiguration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosDiscoveryEndpointAutoConfiguration.java index efb4b0f8..89531326 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosDiscoveryEndpointAutoConfiguration.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosDiscoveryEndpointAutoConfiguration.java @@ -16,6 +16,7 @@ package com.alibaba.cloud.nacos.endpoint; +import com.alibaba.cloud.nacos.NacosNamingManager; import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; import org.springframework.boot.actuate.endpoint.annotation.Endpoint; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; @@ -38,8 +39,9 @@ public class NacosDiscoveryEndpointAutoConfiguration { @ConditionalOnMissingBean @ConditionalOnEnabledEndpoint public NacosDiscoveryEndpoint nacosDiscoveryEndpoint( + NacosNamingManager nacosNamingManager, NacosDiscoveryProperties nacosDiscoveryProperties) { - return new NacosDiscoveryEndpoint(nacosDiscoveryProperties); + return new NacosDiscoveryEndpoint(nacosNamingManager, nacosDiscoveryProperties); } } diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosRegistration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosRegistration.java index b317ffe3..968f8e59 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosRegistration.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosRegistration.java @@ -21,6 +21,7 @@ import java.util.Map; import javax.annotation.PostConstruct; +import com.alibaba.cloud.nacos.NacosNamingManager; import org.springframework.cloud.client.DefaultServiceInstance; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.ManagementServerPortUtils; @@ -43,12 +44,15 @@ public class NacosRegistration implements Registration, ServiceInstance { public static final String MANAGEMENT_ADDRESS = "management.address"; public static final String MANAGEMENT_ENDPOINT_BASE_PATH = "management.endpoints.web.base-path"; + private NacosNamingManager nacosNamingManager; private NacosDiscoveryProperties nacosDiscoveryProperties; private ApplicationContext context; - public NacosRegistration(NacosDiscoveryProperties nacosDiscoveryProperties, + public NacosRegistration(NacosNamingManager nacosNamingManager, + NacosDiscoveryProperties nacosDiscoveryProperties, ApplicationContext context) { + this.nacosNamingManager = nacosNamingManager; this.nacosDiscoveryProperties = nacosDiscoveryProperties; this.context = context; } @@ -143,7 +147,7 @@ public class NacosRegistration implements Registration, ServiceInstance { } public NamingService getNacosNamingService() { - return nacosDiscoveryProperties.namingServiceInstance(); + return nacosNamingManager.getNamingService(); } @Override diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistry.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistry.java index e28f8500..9e8406bc 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistry.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistry.java @@ -18,6 +18,7 @@ package com.alibaba.cloud.nacos.registry; import java.util.List; +import com.alibaba.cloud.nacos.NacosNamingManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.client.serviceregistry.Registration; @@ -36,13 +37,16 @@ public class NacosServiceRegistry implements ServiceRegistry { private static final Logger log = LoggerFactory.getLogger(NacosServiceRegistry.class); + private final NacosNamingManager nacosNamingManager; private final NacosDiscoveryProperties nacosDiscoveryProperties; private final NamingService namingService; - public NacosServiceRegistry(NacosDiscoveryProperties nacosDiscoveryProperties) { + public NacosServiceRegistry(NacosNamingManager nacosNamingManager, + NacosDiscoveryProperties nacosDiscoveryProperties) { + this.nacosNamingManager = nacosNamingManager; this.nacosDiscoveryProperties = nacosDiscoveryProperties; - this.namingService = nacosDiscoveryProperties.namingServiceInstance(); + this.namingService = nacosNamingManager.getNamingService(); } @Override @@ -79,7 +83,7 @@ public class NacosServiceRegistry implements ServiceRegistry { return; } - NamingService namingService = nacosDiscoveryProperties.namingServiceInstance(); + NamingService namingService = nacosNamingManager.getNamingService(); String serviceId = registration.getServiceId(); String group = nacosDiscoveryProperties.getGroup(); @@ -120,8 +124,8 @@ public class NacosServiceRegistry implements ServiceRegistry { } try { - nacosDiscoveryProperties.namingMaintainServiceInstance() - .updateInstance(serviceId, instance); + nacosNamingManager.getNamingMaintainService().updateInstance(serviceId, + instance); } catch (Exception e) { throw new RuntimeException("update nacos instance status fail", e); @@ -134,7 +138,7 @@ public class NacosServiceRegistry implements ServiceRegistry { String serviceName = registration.getServiceId(); try { - List instances = nacosDiscoveryProperties.namingServiceInstance() + List instances = nacosNamingManager.getNamingService() .getAllInstances(serviceName); for (Instance instance : instances) { if (instance.getIp().equalsIgnoreCase(nacosDiscoveryProperties.getIp()) diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosRibbonClientConfiguration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosRibbonClientConfiguration.java index 86d56f24..0fe4ef17 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosRibbonClientConfiguration.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosRibbonClientConfiguration.java @@ -16,6 +16,7 @@ package com.alibaba.cloud.nacos.ribbon; +import com.alibaba.cloud.nacos.NacosNamingManager; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -36,8 +37,10 @@ public class NacosRibbonClientConfiguration { @Bean @ConditionalOnMissingBean public ServerList ribbonServerList(IClientConfig config, + NacosNamingManager nacosNamingManager, NacosDiscoveryProperties nacosDiscoveryProperties) { - NacosServerList serverList = new NacosServerList(nacosDiscoveryProperties); + NacosServerList serverList = new NacosServerList(nacosNamingManager, + nacosDiscoveryProperties); serverList.initWithNiwsConfig(config); return serverList; } diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosRule.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosRule.java index 95bd7e6a..f0c5fcda 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosRule.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosRule.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.Objects; import java.util.stream.Collectors; +import com.alibaba.cloud.nacos.NacosNamingManager; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -31,6 +32,9 @@ public class NacosRule extends AbstractLoadBalancerRule { @Autowired private NacosDiscoveryProperties nacosDiscoveryProperties; + @Autowired + private NacosNamingManager nacosNamingManager; + @Override public Server choose(Object key) { try { @@ -38,8 +42,7 @@ public class NacosRule extends AbstractLoadBalancerRule { DynamicServerListLoadBalancer loadBalancer = (DynamicServerListLoadBalancer) getLoadBalancer(); String name = loadBalancer.getName(); - NamingService namingService = this.nacosDiscoveryProperties - .namingServiceInstance(); + NamingService namingService = this.nacosNamingManager.getNamingService(); List instances = namingService.selectInstances(name, true); if (CollectionUtils.isEmpty(instances)) { LOGGER.warn("no instance in service {}", name); diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosServerList.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosServerList.java index d85ec353..1e88744e 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosServerList.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosServerList.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.List; import com.alibaba.cloud.nacos.NacosDiscoveryProperties; +import com.alibaba.cloud.nacos.NacosNamingManager; import com.alibaba.nacos.api.naming.pojo.Instance; import com.alibaba.nacos.client.naming.utils.CollectionUtils; @@ -32,11 +33,14 @@ import com.netflix.loadbalancer.AbstractServerList; */ public class NacosServerList extends AbstractServerList { + private NacosNamingManager nacosNamingManager; private NacosDiscoveryProperties discoveryProperties; private String serviceId; - public NacosServerList(NacosDiscoveryProperties discoveryProperties) { + public NacosServerList(NacosNamingManager nacosNamingManager, + NacosDiscoveryProperties discoveryProperties) { + this.nacosNamingManager = nacosNamingManager; this.discoveryProperties = discoveryProperties; } @@ -53,8 +57,8 @@ public class NacosServerList extends AbstractServerList { private List getServers() { try { String group = discoveryProperties.getGroup(); - List instances = discoveryProperties.namingServiceInstance() - .selectInstances(serviceId, group,true); + List instances = nacosNamingManager.getNamingService() + .selectInstances(serviceId, group, true); return instancesToServerList(instances); } catch (Exception e) { diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryClientTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryClientTests.java index 4e13cd20..100ac15a 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryClientTests.java +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryClientTests.java @@ -56,16 +56,17 @@ public class NacosDiscoveryClientTests { NacosDiscoveryProperties nacosDiscoveryProperties = mock( NacosDiscoveryProperties.class); + NacosNamingManager nacosNamingManager = mock(NacosNamingManager.class); NamingService namingService = mock(NamingService.class); - when(nacosDiscoveryProperties.namingServiceInstance()).thenReturn(namingService); + when(nacosNamingManager.getNamingService()).thenReturn(namingService); when(nacosDiscoveryProperties.getGroup()).thenReturn("DEFAULT"); - when(namingService.selectInstances(eq(serviceName),eq("DEFAULT"), eq(true))) + when(namingService.selectInstances(eq(serviceName), eq("DEFAULT"), eq(true))) .thenReturn(instances); NacosDiscoveryClient discoveryClient = new NacosDiscoveryClient( - nacosDiscoveryProperties); + nacosNamingManager, nacosDiscoveryProperties); List serviceInstances = discoveryClient .getInstances(serviceName); @@ -97,16 +98,17 @@ public class NacosDiscoveryClientTests { NacosDiscoveryProperties nacosDiscoveryProperties = mock( NacosDiscoveryProperties.class); + NacosNamingManager nacosNamingManager = mock(NacosNamingManager.class); NamingService namingService = mock(NamingService.class); NacosDiscoveryClient discoveryClient = new NacosDiscoveryClient( - nacosDiscoveryProperties); + nacosNamingManager, nacosDiscoveryProperties); - when(nacosDiscoveryProperties.namingServiceInstance()).thenReturn(namingService); + when(nacosNamingManager.getNamingService()).thenReturn(namingService); when(nacosDiscoveryProperties.getGroup()).thenReturn("DEFAULT"); - when(namingService.getServicesOfServer(eq(1), eq(Integer.MAX_VALUE),eq("DEFAULT"))) - .thenReturn(nacosServices); + when(namingService.getServicesOfServer(eq(1), eq(Integer.MAX_VALUE), + eq("DEFAULT"))).thenReturn(nacosServices); List services = discoveryClient.getServices(); diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryPropertiesServerAddressBothLevelTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryPropertiesServerAddressBothLevelTests.java index a0f16153..6c1af015 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryPropertiesServerAddressBothLevelTests.java +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryPropertiesServerAddressBothLevelTests.java @@ -23,18 +23,18 @@ import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientAutoConfiguration; @RunWith(SpringRunner.class) @SpringBootTest(classes = NacosDiscoveryPropertiesServerAddressBothLevelTests.TestConfig.class, properties = { "spring.cloud.nacos.discovery.server-addr=321.321.321.321:8848", - "spring.cloud.nacos.server-addr=123.123.123.123:8848" - }, webEnvironment = RANDOM_PORT) + "spring.cloud.nacos.server-addr=123.123.123.123:8848" }, webEnvironment = RANDOM_PORT) public class NacosDiscoveryPropertiesServerAddressBothLevelTests { @Autowired private NacosDiscoveryProperties properties; - + @Test public void testGetServerAddr() { - assertEquals("NacosDiscoveryProperties server address was wrong","321.321.321.321:8848", properties.getServerAddr()); + assertEquals("NacosDiscoveryProperties server address was wrong", + "321.321.321.321:8848", properties.getServerAddr()); } - + @Configuration @EnableAutoConfiguration @ImportAutoConfiguration({ AutoServiceRegistrationConfiguration.class, diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryPropertiesServerAddressTopLevelTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryPropertiesServerAddressTopLevelTests.java index 26095534..7e3a065d 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryPropertiesServerAddressTopLevelTests.java +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryPropertiesServerAddressTopLevelTests.java @@ -24,19 +24,19 @@ import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientAutoConfiguration; */ @RunWith(SpringRunner.class) @SpringBootTest(classes = NacosDiscoveryPropertiesServerAddressTopLevelTests.TestConfig.class, properties = { - "spring.cloud.nacos.server-addr=123.123.123.123:8848" - }, webEnvironment = RANDOM_PORT) + "spring.cloud.nacos.server-addr=123.123.123.123:8848" }, webEnvironment = RANDOM_PORT) public class NacosDiscoveryPropertiesServerAddressTopLevelTests { @Autowired private NacosDiscoveryProperties properties; - + @Test public void testGetServerAddr() { - assertEquals("NacosDiscoveryProperties server address was wrong","123.123.123.123:8848", properties.getServerAddr()); + assertEquals("NacosDiscoveryProperties server address was wrong", + "123.123.123.123:8848", properties.getServerAddr()); } - + @Configuration @EnableAutoConfiguration @ImportAutoConfiguration({ AutoServiceRegistrationConfiguration.class, diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationTests.java index 6ffe53c1..b2fd7f47 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationTests.java +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationTests.java @@ -23,6 +23,7 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen import java.util.Map; +import com.alibaba.cloud.nacos.NacosNamingManager; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -74,6 +75,9 @@ public class NacosAutoServiceRegistrationTests { @Autowired private NacosDiscoveryProperties properties; + @Autowired + private NacosNamingManager nacosNamingManager; + @Autowired private InetUtils inetUtils; @@ -204,11 +208,11 @@ public class NacosAutoServiceRegistrationTests { private void checkoutEndpoint() throws Exception { NacosDiscoveryEndpoint nacosDiscoveryEndpoint = new NacosDiscoveryEndpoint( - properties); + nacosNamingManager, properties); Map map = nacosDiscoveryEndpoint.nacosDiscovery(); assertEquals(map.get("NacosDiscoveryProperties"), properties); assertEquals(map.get("subscribe").toString(), - properties.namingServiceInstance().getSubscribeServices().toString()); + nacosNamingManager.getNamingService().getSubscribeServices().toString()); } @Configuration diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosServerListTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosServerListTests.java index 84ec00aa..17161df0 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosServerListTests.java +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosServerListTests.java @@ -28,6 +28,7 @@ import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; +import com.alibaba.cloud.nacos.NacosNamingManager; import org.junit.Test; import com.alibaba.cloud.nacos.NacosDiscoveryProperties; @@ -48,14 +49,16 @@ public class NacosServerListTests { public void testEmptyInstancesReturnsEmptyList() throws Exception { NacosDiscoveryProperties nacosDiscoveryProperties = mock( NacosDiscoveryProperties.class); + NacosNamingManager nacosNamingManager = mock(NacosNamingManager.class); NamingService namingService = mock(NamingService.class); - when(nacosDiscoveryProperties.namingServiceInstance()).thenReturn(namingService); + when(nacosNamingManager.getNamingService()).thenReturn(namingService); when(namingService.selectInstances(anyString(), eq("DEFAULT"), eq(true))) .thenReturn(null); - NacosServerList serverList = new NacosServerList(nacosDiscoveryProperties); + NacosServerList serverList = new NacosServerList(nacosNamingManager, + nacosDiscoveryProperties); List servers = serverList.getInitialListOfServers(); assertThat(servers).isEmpty(); } @@ -70,10 +73,11 @@ public class NacosServerListTests { NacosDiscoveryProperties nacosDiscoveryProperties = mock( NacosDiscoveryProperties.class); + NacosNamingManager nacosNamingManager = mock(NacosNamingManager.class); NamingService namingService = mock(NamingService.class); - when(nacosDiscoveryProperties.namingServiceInstance()).thenReturn(namingService); + when(nacosNamingManager.getNamingService()).thenReturn(namingService); when(nacosDiscoveryProperties.getGroup()).thenReturn("DEFAULT"); when(nacosDiscoveryProperties.getGroup()).thenReturn("DEFAULT"); when(namingService.selectInstances(eq("test-service"), eq("DEFAULT"), eq(true))) @@ -81,7 +85,8 @@ public class NacosServerListTests { IClientConfig clientConfig = mock(IClientConfig.class); when(clientConfig.getClientName()).thenReturn("test-service"); - NacosServerList serverList = new NacosServerList(nacosDiscoveryProperties); + NacosServerList serverList = new NacosServerList(nacosNamingManager, + nacosDiscoveryProperties); serverList.initWithNiwsConfig(clientConfig); List servers = serverList.getInitialListOfServers(); assertThat(servers).hasSize(1); @@ -104,10 +109,11 @@ public class NacosServerListTests { NacosDiscoveryProperties nacosDiscoveryProperties = mock( NacosDiscoveryProperties.class); + NacosNamingManager nacosNamingManager = mock(NacosNamingManager.class); NamingService namingService = mock(NamingService.class); - when(nacosDiscoveryProperties.namingServiceInstance()).thenReturn(namingService); + when(nacosNamingManager.getNamingService()).thenReturn(namingService); when(nacosDiscoveryProperties.getGroup()).thenReturn("DEFAULT"); when(namingService.selectInstances(eq("test-service"), eq("DEFAULT"), eq(true))) .thenReturn(instances.stream().filter(Instance::isHealthy) @@ -115,7 +121,8 @@ public class NacosServerListTests { IClientConfig clientConfig = mock(IClientConfig.class); when(clientConfig.getClientName()).thenReturn("test-service"); - NacosServerList serverList = new NacosServerList(nacosDiscoveryProperties); + NacosServerList serverList = new NacosServerList(nacosNamingManager, + nacosDiscoveryProperties); serverList.initWithNiwsConfig(clientConfig); List servers = serverList.getInitialListOfServers(); assertThat(servers).hasSize(1); @@ -142,10 +149,11 @@ public class NacosServerListTests { NacosDiscoveryProperties nacosDiscoveryProperties = mock( NacosDiscoveryProperties.class); + NacosNamingManager nacosNamingManager = mock(NacosNamingManager.class); NamingService namingService = mock(NamingService.class); - when(nacosDiscoveryProperties.namingServiceInstance()).thenReturn(namingService); + when(nacosNamingManager.getNamingService()).thenReturn(namingService); when(nacosDiscoveryProperties.getGroup()).thenReturn("DEFAULT"); when(namingService.selectInstances(eq("test-service"), eq("DEFAULT"), eq(true))) .thenReturn(instances.stream().filter(Instance::isHealthy) @@ -153,7 +161,8 @@ public class NacosServerListTests { IClientConfig clientConfig = mock(IClientConfig.class); when(clientConfig.getClientName()).thenReturn("test-service"); - NacosServerList serverList = new NacosServerList(nacosDiscoveryProperties); + NacosServerList serverList = new NacosServerList(nacosNamingManager, + nacosDiscoveryProperties); serverList.initWithNiwsConfig(clientConfig); List servers = serverList.getUpdatedListOfServers();