From 879e689390b3779ff9014a2d3e8c5e7824c4a1b9 Mon Sep 17 00:00:00 2001 From: flystar32 Date: Tue, 18 Sep 2018 14:58:50 +0800 Subject: [PATCH] update NacosAutoServiceRegistration, update pom.xml, and format code --- spring-cloud-alibaba-nacos-discovery/pom.xml | 6 +- .../NacosDiscoveryAutoConfiguration.java | 6 +- .../alibaba/nacos/NacosDiscoveryClient.java | 26 +++--- .../nacos/NacosDiscoveryProperties.java | 81 +++++++++---------- ...cosDiscoveryEndpointAutoConfiguration.java | 1 - .../NacosAutoServiceRegistration.java | 71 +++++++++------- .../nacos/registry/NacosRegistration.java | 19 ++--- .../alibaba/nacos/ribbon/NacosServerList.java | 10 ++- 8 files changed, 116 insertions(+), 104 deletions(-) diff --git a/spring-cloud-alibaba-nacos-discovery/pom.xml b/spring-cloud-alibaba-nacos-discovery/pom.xml index b69c9401c..ff061d2f6 100644 --- a/spring-cloud-alibaba-nacos-discovery/pom.xml +++ b/spring-cloud-alibaba-nacos-discovery/pom.xml @@ -34,7 +34,6 @@ spring-cloud-starter-netflix-ribbon - org.springframework.boot spring-boot-actuator @@ -62,13 +61,12 @@ provided true + org.springframework.boot spring-boot-starter-web - provided - true + test - org.springframework.boot spring-boot-starter-test diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryAutoConfiguration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryAutoConfiguration.java index f629b5bb9..78c7ddcca 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryAutoConfiguration.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryAutoConfiguration.java @@ -63,8 +63,10 @@ public class NacosDiscoveryAutoConfiguration { @Bean @ConditionalOnBean(AutoServiceRegistrationProperties.class) public NacosAutoServiceRegistration nacosAutoServiceRegistration( - NacosServiceRegistry registry, AutoServiceRegistrationProperties properties, + NacosServiceRegistry registry, + AutoServiceRegistrationProperties autoServiceRegistrationProperties, NacosRegistration registration) { - return new NacosAutoServiceRegistration(registry, properties, registration); + return new NacosAutoServiceRegistration(registry, + autoServiceRegistrationProperties, registration); } } \ No newline at end of file diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryClient.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryClient.java index c1e3eaeb8..16d225407 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryClient.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryClient.java @@ -35,7 +35,8 @@ import com.alibaba.nacos.api.naming.pojo.ListView; */ public class NacosDiscoveryClient implements DiscoveryClient { - private static final Logger LOGGER = LoggerFactory.getLogger(NacosDiscoveryClient.class); + private static final Logger LOGGER = LoggerFactory + .getLogger(NacosDiscoveryClient.class); public static final String DESCRIPTION = "Spring Cloud Nacos Discovery Client"; @Autowired @@ -85,7 +86,7 @@ public class NacosDiscoveryClient implements DiscoveryClient { public List getInstances(String serviceId) { try { NamingService namingService = nacosRegistration.getNacosNamingService(); - List instances = namingService.selectInstances(serviceId,true); + List instances = namingService.selectInstances(serviceId, true); return hostToServiceInstanceList(instances, serviceId); } catch (Exception e) { @@ -94,25 +95,26 @@ public class NacosDiscoveryClient implements DiscoveryClient { } } - private static ServiceInstance hostToServiceInstance(Instance instance, String serviceId) { + private static ServiceInstance hostToServiceInstance(Instance instance, + String serviceId) { NacosServiceInstance nacosServiceInstance = new NacosServiceInstance(); nacosServiceInstance.setHost(instance.getIp()); nacosServiceInstance.setPort(instance.getPort()); nacosServiceInstance.setServiceId(serviceId); Map metadata = new HashMap(); metadata.put("instanceId", instance.getInstanceId()); - metadata.put("weight", instance.getWeight()+""); - metadata.put("healthy", instance.isHealthy()+""); - metadata.put("cluster", instance.getCluster()+""); + metadata.put("weight", instance.getWeight() + ""); + metadata.put("healthy", instance.isHealthy() + ""); + metadata.put("cluster", instance.getCluster() + ""); metadata.putAll(instance.getMetadata()); nacosServiceInstance.setMetadata(metadata); return nacosServiceInstance; } - private static List hostToServiceInstanceList(List instances, - String serviceId) { + private static List hostToServiceInstanceList( + List instances, String serviceId) { List result = new ArrayList(instances.size()); - for (Instance instance: instances) { + for (Instance instance : instances) { result.add(hostToServiceInstance(instance, serviceId)); } return result; @@ -123,9 +125,11 @@ public class NacosDiscoveryClient implements DiscoveryClient { try { NamingService namingService = nacosRegistration.getNacosNamingService(); - ListView services = namingService.getServicesOfServer(1, Integer.MAX_VALUE); + ListView services = namingService.getServicesOfServer(1, + Integer.MAX_VALUE); return services.getData(); - }catch( Exception e){ + } + catch (Exception e) { LOGGER.error("get service name from nacos server fail,", e); return Collections.emptyList(); } diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryProperties.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryProperties.java index f042e4bcc..43b6a5c7e 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryProperties.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryProperties.java @@ -16,7 +16,6 @@ package org.springframework.cloud.alibaba.nacos; -import com.fasterxml.jackson.annotation.JsonIgnore; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -49,7 +48,8 @@ public class NacosDiscoveryProperties { private String serverAddr; /** - * the domain name of a service, through which the server address can be dynamically obtained. + * the domain name of a service, through which the server address can be dynamically + * obtained. */ private String endpoint; @@ -91,8 +91,8 @@ public class NacosDiscoveryProperties { private boolean registerEnabled = true; /** - * The ip address your want to register for your service instance, needn't to set it if - * the auto detect ip works well + * The ip address your want to register for your service instance, needn't to set it + * if the auto detect ip works well. */ private String ip; @@ -123,7 +123,6 @@ public class NacosDiscoveryProperties { private String secretKey; @Autowired - @JsonIgnore private InetUtils inetUtils; @PostConstruct @@ -190,10 +189,6 @@ public class NacosDiscoveryProperties { this.logName = logName; } - public InetUtils getInetUtils() { - return inetUtils; - } - public void setInetUtils(InetUtils inetUtils) { this.inetUtils = inetUtils; } @@ -296,47 +291,45 @@ public class NacosDiscoveryProperties { @Override public String toString() { - return "NacosDiscoveryProperties{" + - "serverAddr='" + serverAddr + '\'' + - ", endpoint='" + endpoint + '\'' + - ", namespace='" + namespace + '\'' + - ", logName='" + logName + '\'' + - ", service='" + service + '\'' + - ", weight=" + weight + - ", clusterName='" + clusterName + '\'' + - ", metadata=" + metadata + - ", registerEnabled=" + registerEnabled + - ", ip='" + ip + '\'' + - ", networkInterface='" + networkInterface + '\'' + - ", port=" + port + - ", secure=" + secure + - ", accessKey='" + accessKey + '\'' + - ", secretKey='" + secretKey + '\'' + - '}'; - } - - public void overrideFromEnv(Environment env){ - - if(StringUtils.isEmpty(this.getServerAddr())) { - this.setServerAddr(env.resolvePlaceholders("${spring.cloud.nacos.discovery.server-addr:}")); + return "NacosDiscoveryProperties{" + "serverAddr='" + serverAddr + '\'' + + ", endpoint='" + endpoint + '\'' + ", namespace='" + namespace + '\'' + + ", logName='" + logName + '\'' + ", service='" + service + '\'' + + ", weight=" + weight + ", clusterName='" + clusterName + '\'' + + ", metadata=" + metadata + ", registerEnabled=" + registerEnabled + + ", ip='" + ip + '\'' + ", networkInterface='" + networkInterface + '\'' + + ", port=" + port + ", secure=" + secure + ", accessKey='" + accessKey + + '\'' + ", secretKey='" + secretKey + '\'' + '}'; + } + + public void overrideFromEnv(Environment env) { + + if (StringUtils.isEmpty(this.getServerAddr())) { + this.setServerAddr(env + .resolvePlaceholders("${spring.cloud.nacos.discovery.server-addr:}")); } - if(StringUtils.isEmpty(this.getNamespace())) { - this.setNamespace(env.resolvePlaceholders("${spring.cloud.nacos.discovery.namespace:}")); + if (StringUtils.isEmpty(this.getNamespace())) { + this.setNamespace(env + .resolvePlaceholders("${spring.cloud.nacos.discovery.namespace:}")); } - if(StringUtils.isEmpty(this.getAccessKey())) { - this.setAccessKey(env.resolvePlaceholders("${spring.cloud.nacos.discovery.access-key:}")); + if (StringUtils.isEmpty(this.getAccessKey())) { + this.setAccessKey(env + .resolvePlaceholders("${spring.cloud.nacos.discovery.access-key:}")); } - if(StringUtils.isEmpty(this.getSecretKey())) { - this.setSecretKey(env.resolvePlaceholders("${spring.cloud.nacos.discovery.secret-key:}")); + if (StringUtils.isEmpty(this.getSecretKey())) { + this.setSecretKey(env + .resolvePlaceholders("${spring.cloud.nacos.discovery.secret-key:}")); } - if(StringUtils.isEmpty(this.getLogName())) { - this.setLogName(env.resolvePlaceholders("${spring.cloud.nacos.discovery.log-name:}")); + if (StringUtils.isEmpty(this.getLogName())) { + this.setLogName( + env.resolvePlaceholders("${spring.cloud.nacos.discovery.log-name:}")); } - if(StringUtils.isEmpty(this.getClusterName())) { - this.setClusterName(env.resolvePlaceholders("${spring.cloud.nacos.discovery.clusterName-name:}")); + if (StringUtils.isEmpty(this.getClusterName())) { + this.setClusterName(env.resolvePlaceholders( + "${spring.cloud.nacos.discovery.clusterName-name:}")); } - if(StringUtils.isEmpty(this.getEndpoint())) { - this.setEndpoint(env.resolvePlaceholders("${spring.cloud.nacos.discovery.endpoint:}")); + if (StringUtils.isEmpty(this.getEndpoint())) { + this.setEndpoint( + env.resolvePlaceholders("${spring.cloud.nacos.discovery.endpoint:}")); } } diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/endpoint/NacosDiscoveryEndpointAutoConfiguration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/endpoint/NacosDiscoveryEndpointAutoConfiguration.java index b107dc1d6..5278cd3b4 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/endpoint/NacosDiscoveryEndpointAutoConfiguration.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/endpoint/NacosDiscoveryEndpointAutoConfiguration.java @@ -30,7 +30,6 @@ import org.springframework.context.annotation.Configuration; @ConditionalOnClass(name = "org.springframework.boot.actuate.endpoint.AbstractEndpoint") public class NacosDiscoveryEndpointAutoConfiguration { - @Bean @ConditionalOnMissingBean public NacosDiscoveryEndpoint nacosDiscoveryEndpoint() { diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistration.java index 5db714d8d..66df7944a 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistration.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistration.java @@ -19,12 +19,11 @@ package org.springframework.cloud.alibaba.nacos.registry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.context.embedded.EmbeddedServletContainerInitializedEvent; import org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationProperties; import org.springframework.cloud.client.serviceregistry.ServiceRegistry; -import org.springframework.context.ApplicationContext; -import org.springframework.context.event.EventListener; +import org.springframework.util.Assert; +import org.springframework.util.StringUtils; /** * @author xiaojing @@ -37,20 +36,26 @@ public class NacosAutoServiceRegistration @Autowired private NacosRegistration registration; - @Autowired - private ApplicationContext context; - public NacosAutoServiceRegistration( ServiceRegistry serviceRegistry, - AutoServiceRegistrationProperties properties, + AutoServiceRegistrationProperties autoServiceRegistrationProperties, NacosRegistration registration) { - super(serviceRegistry, properties); + super(serviceRegistry, autoServiceRegistrationProperties); this.registration = registration; } + @Deprecated + public void setPort(int port) { + getPort().set(port); + } + @Override protected NacosRegistration getRegistration() { - return registration; + if (this.registration.getPort() < 0 && this.getPort().get() > 0) { + this.registration.setPort(this.getPort().get()); + } + Assert.isTrue(this.registration.getPort() > 0, "service.port has not been set"); + return this.registration; } @Override @@ -58,6 +63,27 @@ public class NacosAutoServiceRegistration return null; } + @Override + protected void register() { + if (!this.registration.getNacosDiscoveryProperties().isRegisterEnabled()) { + LOGGER.debug("Registration disabled."); + return; + } + if (this.registration.getPort() < 0) { + this.registration.setPort(getPort().get()); + } + super.register(); + } + + @Override + protected void registerManagement() { + if (!this.registration.getNacosDiscoveryProperties().isRegisterEnabled()) { + return; + } + super.registerManagement(); + + } + @Override protected int getConfiguredPort() { return this.getPort().get(); @@ -70,34 +96,19 @@ public class NacosAutoServiceRegistration @Override protected Object getConfiguration() { - return null; + return this.registration.getNacosDiscoveryProperties(); } @Override protected boolean isEnabled() { - return true; + return this.registration.getNacosDiscoveryProperties().isRegisterEnabled(); } - /** - * Register the local service with the {@link ServiceRegistry} - */ @Override - protected void register() { - this.registration.setPort(this.getPort().get()); - this.getServiceRegistry().register(getRegistration()); - } - - @Override - @EventListener(EmbeddedServletContainerInitializedEvent.class) - public void onApplicationEvent(EmbeddedServletContainerInitializedEvent event) { - if (context.equals(event.getApplicationContext())) { - int localPort = event.getEmbeddedServletContainer().getPort(); - if (this.getPort().get() == 0) { - LOGGER.info("Updating port to " + localPort); - this.getPort().compareAndSet(0, localPort); - start(); - } - } + @SuppressWarnings("deprecation") + protected String getAppName() { + String appName = registration.getNacosDiscoveryProperties().getService(); + return StringUtils.isEmpty(appName) ? super.getAppName() : appName; } } diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/registry/NacosRegistration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/registry/NacosRegistration.java index fe895cb23..10620415d 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/registry/NacosRegistration.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/registry/NacosRegistration.java @@ -34,6 +34,7 @@ import com.alibaba.nacos.api.naming.NamingService; import com.alibaba.nacos.client.naming.utils.UtilAndComs; import static com.alibaba.nacos.api.PropertyKeyConst.*; + /** * @author xiaojing */ @@ -54,11 +55,12 @@ public class NacosRegistration implements Registration, ServiceInstance { Properties properties = new Properties(); properties.put(SERVER_ADDR, nacosDiscoveryProperties.getServerAddr()); properties.put(NAMESPACE, nacosDiscoveryProperties.getNamespace()); - properties.put(UtilAndComs.NACOS_NAMING_LOG_NAME, nacosDiscoveryProperties.getLogName()); + properties.put(UtilAndComs.NACOS_NAMING_LOG_NAME, + nacosDiscoveryProperties.getLogName()); properties.put(ENDPOINT, nacosDiscoveryProperties.getEndpoint()); - properties.put(ACCESS_KEY,nacosDiscoveryProperties.getAccessKey()); - properties.put(SECRET_KEY,nacosDiscoveryProperties.getSecretKey()); - properties.put(CLUSTER_NAME,nacosDiscoveryProperties.getClusterName()); + properties.put(ACCESS_KEY, nacosDiscoveryProperties.getAccessKey()); + properties.put(SECRET_KEY, nacosDiscoveryProperties.getSecretKey()); + properties.put(CLUSTER_NAME, nacosDiscoveryProperties.getClusterName()); try { nacosNamingService = NacosFactory.createNamingService(properties); } @@ -128,15 +130,14 @@ public class NacosRegistration implements Registration, ServiceInstance { } public void setNacosDiscoveryProperties( - NacosDiscoveryProperties nacosDiscoveryProperties) { + NacosDiscoveryProperties nacosDiscoveryProperties) { this.nacosDiscoveryProperties = nacosDiscoveryProperties; } @Override public String toString() { - return "NacosRegistration{" + - "nacosDiscoveryProperties=" + nacosDiscoveryProperties + - ", nacosNamingService=" + nacosNamingService + - '}'; + return "NacosRegistration{" + "nacosDiscoveryProperties=" + + nacosDiscoveryProperties + ", nacosNamingService=" + nacosNamingService + + '}'; } } diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosServerList.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosServerList.java index 0d4fdbb89..59555865c 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosServerList.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosServerList.java @@ -36,7 +36,8 @@ public class NacosServerList extends AbstractServerList { private String serviceId; - public NacosServerList(){} + public NacosServerList() { + } public NacosServerList(String serviceId) { this.serviceId = serviceId; @@ -54,11 +55,14 @@ public class NacosServerList extends AbstractServerList { private List getServers() { try { - List instances = registration.getNacosNamingService().selectInstances(serviceId, true); + List instances = registration.getNacosNamingService() + .selectInstances(serviceId, true); return instancesToServerList(instances); } catch (Exception e) { - throw new IllegalStateException("Can not get service instances from nacos, serviceId=" + serviceId, e); + throw new IllegalStateException( + "Can not get service instances from nacos, serviceId=" + serviceId, + e); } }