mirror of
https://gitee.com/mirrors/Spring-Cloud-Alibaba.git
synced 2021-06-26 13:25:11 +08:00
Polish alibaba/spring-cloud-alibaba#1739 : Sync the Nacos Discovery from master
This commit is contained in:
parent
1315470fbe
commit
1040206269
@ -19,7 +19,6 @@ package com.alibaba.cloud.nacos;
|
|||||||
import java.net.Inet4Address;
|
import java.net.Inet4Address;
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.net.NetworkInterface;
|
import java.net.NetworkInterface;
|
||||||
import java.net.SocketException;
|
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -30,9 +29,7 @@ import java.util.regex.Pattern;
|
|||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
import javax.annotation.PostConstruct;
|
||||||
|
|
||||||
import com.alibaba.nacos.api.NacosFactory;
|
import com.alibaba.cloud.nacos.event.NacosDiscoveryInfoChangedEvent;
|
||||||
import com.alibaba.nacos.api.naming.NamingMaintainFactory;
|
|
||||||
import com.alibaba.nacos.api.naming.NamingMaintainService;
|
|
||||||
import com.alibaba.nacos.api.naming.NamingService;
|
import com.alibaba.nacos.api.naming.NamingService;
|
||||||
import com.alibaba.nacos.api.naming.PreservedMetadataKeys;
|
import com.alibaba.nacos.api.naming.PreservedMetadataKeys;
|
||||||
import com.alibaba.nacos.client.naming.utils.UtilAndComs;
|
import com.alibaba.nacos.client.naming.utils.UtilAndComs;
|
||||||
@ -44,6 +41,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
import org.springframework.cloud.commons.util.InetUtils;
|
import org.springframework.cloud.commons.util.InetUtils;
|
||||||
|
import org.springframework.context.ApplicationEventPublisher;
|
||||||
import org.springframework.core.env.ConfigurableEnvironment;
|
import org.springframework.core.env.ConfigurableEnvironment;
|
||||||
import org.springframework.core.env.Environment;
|
import org.springframework.core.env.Environment;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
@ -64,8 +62,8 @@ import static com.alibaba.nacos.api.PropertyKeyConst.USERNAME;
|
|||||||
* @author xiaojing
|
* @author xiaojing
|
||||||
* @author <a href="mailto:mercyblitz@gmail.com">Mercy</a>
|
* @author <a href="mailto:mercyblitz@gmail.com">Mercy</a>
|
||||||
* @author <a href="mailto:lyuzb@lyuzb.com">lyuzb</a>
|
* @author <a href="mailto:lyuzb@lyuzb.com">lyuzb</a>
|
||||||
|
* @author <a href="mailto:78552423@qq.com">eshun</a>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ConfigurationProperties("spring.cloud.nacos.discovery")
|
@ConfigurationProperties("spring.cloud.nacos.discovery")
|
||||||
public class NacosDiscoveryProperties {
|
public class NacosDiscoveryProperties {
|
||||||
|
|
||||||
@ -199,18 +197,30 @@ public class NacosDiscoveryProperties {
|
|||||||
*/
|
*/
|
||||||
private Integer ipDeleteTimeout;
|
private Integer ipDeleteTimeout;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If instance is enabled to accept request. The default value is true.
|
||||||
|
*/
|
||||||
|
private boolean instanceEnabled = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If instance is ephemeral.The default value is true.
|
||||||
|
*/
|
||||||
|
private boolean ephemeral = true;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private InetUtils inetUtils;
|
private InetUtils inetUtils;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private Environment environment;
|
private Environment environment;
|
||||||
|
|
||||||
private static NamingService namingService;
|
@Autowired
|
||||||
|
private NacosServiceManager nacosServiceManager;
|
||||||
|
|
||||||
private static NamingMaintainService namingMaintainService;
|
@Autowired
|
||||||
|
private ApplicationEventPublisher applicationEventPublisher;
|
||||||
|
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
public void init() throws SocketException {
|
public void init() throws Exception {
|
||||||
|
|
||||||
metadata.put(PreservedMetadataKeys.REGISTER_SOURCE, "SPRING_CLOUD");
|
metadata.put(PreservedMetadataKeys.REGISTER_SOURCE, "SPRING_CLOUD");
|
||||||
if (secure) {
|
if (secure) {
|
||||||
@ -257,6 +267,19 @@ public class NacosDiscoveryProperties {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.overrideFromEnv(environment);
|
this.overrideFromEnv(environment);
|
||||||
|
if (nacosServiceManager.isNacosDiscoveryInfoChanged(this)) {
|
||||||
|
applicationEventPublisher
|
||||||
|
.publishEvent(new NacosDiscoveryInfoChangedEvent(this));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* recommend to use {@link NacosServiceManager#getNamingService(Properties)}.
|
||||||
|
* @return NamingService
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
public NamingService namingServiceInstance() {
|
||||||
|
return nacosServiceManager.getNamingService(this.getNacosProperties());
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getEndpoint() {
|
public String getEndpoint() {
|
||||||
@ -447,6 +470,58 @@ public class NacosDiscoveryProperties {
|
|||||||
this.password = password;
|
this.password = password;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isInstanceEnabled() {
|
||||||
|
return instanceEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInstanceEnabled(boolean instanceEnabled) {
|
||||||
|
this.instanceEnabled = instanceEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isEphemeral() {
|
||||||
|
return ephemeral;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEphemeral(boolean ephemeral) {
|
||||||
|
this.ephemeral = ephemeral;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (o == null || getClass() != o.getClass()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
NacosDiscoveryProperties that = (NacosDiscoveryProperties) o;
|
||||||
|
return Objects.equals(serverAddr, that.serverAddr)
|
||||||
|
&& Objects.equals(username, that.username)
|
||||||
|
&& Objects.equals(password, that.password)
|
||||||
|
&& Objects.equals(endpoint, that.endpoint)
|
||||||
|
&& Objects.equals(namespace, that.namespace)
|
||||||
|
&& Objects.equals(logName, that.logName)
|
||||||
|
&& Objects.equals(service, that.service)
|
||||||
|
&& Objects.equals(clusterName, that.clusterName)
|
||||||
|
&& Objects.equals(group, that.group) && Objects.equals(ip, that.ip)
|
||||||
|
&& Objects.equals(port, that.port)
|
||||||
|
&& Objects.equals(networkInterface, that.networkInterface)
|
||||||
|
&& Objects.equals(accessKey, that.accessKey)
|
||||||
|
&& Objects.equals(secretKey, that.secretKey)
|
||||||
|
&& Objects.equals(heartBeatInterval, that.heartBeatInterval)
|
||||||
|
&& Objects.equals(heartBeatTimeout, that.heartBeatTimeout)
|
||||||
|
&& Objects.equals(ipDeleteTimeout, that.ipDeleteTimeout);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(serverAddr, username, password, endpoint, namespace,
|
||||||
|
watchDelay, logName, service, weight, clusterName, group,
|
||||||
|
namingLoadCacheAtStart, registerEnabled, ip, networkInterface, port,
|
||||||
|
secure, accessKey, secretKey, heartBeatInterval, heartBeatTimeout,
|
||||||
|
ipDeleteTimeout, instanceEnabled, ephemeral);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "NacosDiscoveryProperties{" + "serverAddr='" + serverAddr + '\''
|
return "NacosDiscoveryProperties{" + "serverAddr='" + serverAddr + '\''
|
||||||
@ -510,41 +585,7 @@ public class NacosDiscoveryProperties {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public NamingService namingServiceInstance() {
|
public Properties getNacosProperties() {
|
||||||
|
|
||||||
if (null != namingService) {
|
|
||||||
return namingService;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
namingService = NacosFactory.createNamingService(getNacosProperties());
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
log.error("create naming service error!properties={},e=,", this, e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return namingService;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public NamingMaintainService namingMaintainServiceInstance() {
|
|
||||||
|
|
||||||
if (null != namingMaintainService) {
|
|
||||||
return namingMaintainService;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
namingMaintainService = NamingMaintainFactory
|
|
||||||
.createMaintainService(getNacosProperties());
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
log.error("create naming service error!properties={},e=,", this, e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return namingMaintainService;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Properties getNacosProperties() {
|
|
||||||
Properties properties = new Properties();
|
Properties properties = new Properties();
|
||||||
properties.put(SERVER_ADDR, serverAddr);
|
properties.put(SERVER_ADDR, serverAddr);
|
||||||
properties.put(USERNAME, Objects.toString(username, ""));
|
properties.put(USERNAME, Objects.toString(username, ""));
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* 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;
|
||||||
|
|
||||||
|
import org.springframework.cloud.client.ConditionalOnDiscoveryEnabled;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author yuhuangbin
|
||||||
|
*/
|
||||||
|
@Configuration
|
||||||
|
@ConditionalOnDiscoveryEnabled
|
||||||
|
@ConditionalOnNacosDiscoveryEnabled
|
||||||
|
public class NacosServiceAutoConfiguration {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public NacosServiceManager nacosServiceManager() {
|
||||||
|
return new NacosServiceManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,134 @@
|
|||||||
|
/*
|
||||||
|
* 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;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import com.alibaba.cloud.nacos.registry.NacosRegistration;
|
||||||
|
import com.alibaba.nacos.api.exception.NacosException;
|
||||||
|
import com.alibaba.nacos.api.naming.NamingMaintainService;
|
||||||
|
import com.alibaba.nacos.api.naming.NamingService;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import org.springframework.cloud.client.discovery.event.InstancePreRegisteredEvent;
|
||||||
|
import org.springframework.cloud.client.serviceregistry.Registration;
|
||||||
|
import org.springframework.context.event.EventListener;
|
||||||
|
|
||||||
|
import static com.alibaba.nacos.api.NacosFactory.createMaintainService;
|
||||||
|
import static com.alibaba.nacos.api.NacosFactory.createNamingService;
|
||||||
|
import static org.springframework.beans.BeanUtils.copyProperties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author yuhuangbin
|
||||||
|
*/
|
||||||
|
public class NacosServiceManager {
|
||||||
|
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(NacosServiceManager.class);
|
||||||
|
|
||||||
|
private NacosDiscoveryProperties nacosDiscoveryPropertiesCache;
|
||||||
|
|
||||||
|
private NamingService namingService;
|
||||||
|
|
||||||
|
private NamingMaintainService namingMaintainService;
|
||||||
|
|
||||||
|
public NamingService getNamingService(Properties properties) {
|
||||||
|
if (Objects.isNull(this.namingService)) {
|
||||||
|
buildNamingService(properties);
|
||||||
|
}
|
||||||
|
return namingService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public NamingMaintainService getNamingMaintainService(Properties properties) {
|
||||||
|
if (Objects.isNull(namingMaintainService)) {
|
||||||
|
buildNamingMaintainService(properties);
|
||||||
|
}
|
||||||
|
return namingMaintainService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isNacosDiscoveryInfoChanged(
|
||||||
|
NacosDiscoveryProperties nacosDiscoveryProperties) {
|
||||||
|
if (Objects.isNull(nacosDiscoveryPropertiesCache)
|
||||||
|
|| this.nacosDiscoveryPropertiesCache.equals(nacosDiscoveryProperties)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
copyProperties(nacosDiscoveryProperties, nacosDiscoveryPropertiesCache);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private NamingMaintainService buildNamingMaintainService(Properties properties) {
|
||||||
|
if (Objects.isNull(namingMaintainService)) {
|
||||||
|
synchronized (NacosServiceManager.class) {
|
||||||
|
if (Objects.isNull(namingMaintainService)) {
|
||||||
|
namingMaintainService = createNamingMaintainService(properties);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return namingMaintainService;
|
||||||
|
}
|
||||||
|
|
||||||
|
private NamingService buildNamingService(Properties properties) {
|
||||||
|
if (Objects.isNull(namingService)) {
|
||||||
|
synchronized (NacosServiceManager.class) {
|
||||||
|
if (Objects.isNull(namingService)) {
|
||||||
|
namingService = createNewNamingService(properties);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return namingService;
|
||||||
|
}
|
||||||
|
|
||||||
|
private NamingService createNewNamingService(Properties properties) {
|
||||||
|
try {
|
||||||
|
return createNamingService(properties);
|
||||||
|
}
|
||||||
|
catch (NacosException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private NamingMaintainService createNamingMaintainService(Properties properties) {
|
||||||
|
try {
|
||||||
|
return createMaintainService(properties);
|
||||||
|
}
|
||||||
|
catch (NacosException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void nacosServiceShutDown() throws NacosException {
|
||||||
|
this.namingService.shutDown();
|
||||||
|
namingService = null;
|
||||||
|
namingMaintainService = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventListener
|
||||||
|
public void onInstancePreRegisteredEvent(
|
||||||
|
InstancePreRegisteredEvent instancePreRegisteredEvent) {
|
||||||
|
Registration registration = instancePreRegisteredEvent.getRegistration();
|
||||||
|
if (Objects.isNull(nacosDiscoveryPropertiesCache)
|
||||||
|
&& registration instanceof NacosRegistration) {
|
||||||
|
NacosDiscoveryProperties nacosDiscoveryProperties = ((NacosRegistration) registration)
|
||||||
|
.getNacosDiscoveryProperties();
|
||||||
|
|
||||||
|
nacosDiscoveryPropertiesCache = new NacosDiscoveryProperties();
|
||||||
|
copyProperties(nacosDiscoveryProperties, nacosDiscoveryPropertiesCache);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -18,6 +18,7 @@ package com.alibaba.cloud.nacos.discovery;
|
|||||||
|
|
||||||
import com.alibaba.cloud.nacos.ConditionalOnNacosDiscoveryEnabled;
|
import com.alibaba.cloud.nacos.ConditionalOnNacosDiscoveryEnabled;
|
||||||
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
|
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
|
||||||
|
import com.alibaba.cloud.nacos.NacosServiceManager;
|
||||||
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
import org.springframework.cloud.client.ConditionalOnDiscoveryEnabled;
|
import org.springframework.cloud.client.ConditionalOnDiscoveryEnabled;
|
||||||
@ -41,8 +42,9 @@ public class NacosDiscoveryAutoConfiguration {
|
|||||||
@Bean
|
@Bean
|
||||||
@ConditionalOnMissingBean
|
@ConditionalOnMissingBean
|
||||||
public NacosServiceDiscovery nacosServiceDiscovery(
|
public NacosServiceDiscovery nacosServiceDiscovery(
|
||||||
NacosDiscoveryProperties discoveryProperties) {
|
NacosDiscoveryProperties discoveryProperties,
|
||||||
return new NacosServiceDiscovery(discoveryProperties);
|
NacosServiceManager nacosServiceManager) {
|
||||||
|
return new NacosServiceDiscovery(discoveryProperties, nacosServiceManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@ package com.alibaba.cloud.nacos.discovery;
|
|||||||
|
|
||||||
import com.alibaba.cloud.nacos.ConditionalOnNacosDiscoveryEnabled;
|
import com.alibaba.cloud.nacos.ConditionalOnNacosDiscoveryEnabled;
|
||||||
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
|
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
|
||||||
|
import com.alibaba.cloud.nacos.NacosServiceManager;
|
||||||
|
|
||||||
import org.springframework.beans.factory.ObjectProvider;
|
import org.springframework.beans.factory.ObjectProvider;
|
||||||
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
||||||
@ -55,9 +56,11 @@ public class NacosDiscoveryClientConfiguration {
|
|||||||
@Bean
|
@Bean
|
||||||
@ConditionalOnMissingBean
|
@ConditionalOnMissingBean
|
||||||
@ConditionalOnProperty(value = "spring.cloud.nacos.discovery.watch.enabled", matchIfMissing = true)
|
@ConditionalOnProperty(value = "spring.cloud.nacos.discovery.watch.enabled", matchIfMissing = true)
|
||||||
public NacosWatch nacosWatch(NacosDiscoveryProperties nacosDiscoveryProperties,
|
public NacosWatch nacosWatch(NacosServiceManager nacosServiceManager,
|
||||||
ObjectProvider<TaskScheduler> taskScheduler) {
|
NacosDiscoveryProperties nacosDiscoveryProperties,
|
||||||
return new NacosWatch(nacosDiscoveryProperties, taskScheduler);
|
ObjectProvider<TaskScheduler> taskExecutorObjectProvider) {
|
||||||
|
return new NacosWatch(nacosServiceManager, nacosDiscoveryProperties,
|
||||||
|
taskExecutorObjectProvider);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,9 @@ import java.util.Map;
|
|||||||
|
|
||||||
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
|
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
|
||||||
import com.alibaba.cloud.nacos.NacosServiceInstance;
|
import com.alibaba.cloud.nacos.NacosServiceInstance;
|
||||||
|
import com.alibaba.cloud.nacos.NacosServiceManager;
|
||||||
import com.alibaba.nacos.api.exception.NacosException;
|
import com.alibaba.nacos.api.exception.NacosException;
|
||||||
|
import com.alibaba.nacos.api.naming.NamingService;
|
||||||
import com.alibaba.nacos.api.naming.pojo.Instance;
|
import com.alibaba.nacos.api.naming.pojo.Instance;
|
||||||
import com.alibaba.nacos.api.naming.pojo.ListView;
|
import com.alibaba.nacos.api.naming.pojo.ListView;
|
||||||
|
|
||||||
@ -36,8 +38,12 @@ public class NacosServiceDiscovery {
|
|||||||
|
|
||||||
private NacosDiscoveryProperties discoveryProperties;
|
private NacosDiscoveryProperties discoveryProperties;
|
||||||
|
|
||||||
public NacosServiceDiscovery(NacosDiscoveryProperties discoveryProperties) {
|
private NacosServiceManager nacosServiceManager;
|
||||||
|
|
||||||
|
public NacosServiceDiscovery(NacosDiscoveryProperties discoveryProperties,
|
||||||
|
NacosServiceManager nacosServiceManager) {
|
||||||
this.discoveryProperties = discoveryProperties;
|
this.discoveryProperties = discoveryProperties;
|
||||||
|
this.nacosServiceManager = nacosServiceManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -48,8 +54,8 @@ public class NacosServiceDiscovery {
|
|||||||
*/
|
*/
|
||||||
public List<ServiceInstance> getInstances(String serviceId) throws NacosException {
|
public List<ServiceInstance> getInstances(String serviceId) throws NacosException {
|
||||||
String group = discoveryProperties.getGroup();
|
String group = discoveryProperties.getGroup();
|
||||||
List<Instance> instances = discoveryProperties.namingServiceInstance()
|
List<Instance> instances = namingService().selectInstances(serviceId, group,
|
||||||
.selectInstances(serviceId, group, true);
|
true);
|
||||||
return hostToServiceInstanceList(instances, serviceId);
|
return hostToServiceInstanceList(instances, serviceId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,8 +66,8 @@ public class NacosServiceDiscovery {
|
|||||||
*/
|
*/
|
||||||
public List<String> getServices() throws NacosException {
|
public List<String> getServices() throws NacosException {
|
||||||
String group = discoveryProperties.getGroup();
|
String group = discoveryProperties.getGroup();
|
||||||
ListView<String> services = discoveryProperties.namingServiceInstance()
|
ListView<String> services = namingService().getServicesOfServer(1,
|
||||||
.getServicesOfServer(1, Integer.MAX_VALUE, group);
|
Integer.MAX_VALUE, group);
|
||||||
return services.getData();
|
return services.getData();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,7 +98,10 @@ public class NacosServiceDiscovery {
|
|||||||
metadata.put("nacos.weight", instance.getWeight() + "");
|
metadata.put("nacos.weight", instance.getWeight() + "");
|
||||||
metadata.put("nacos.healthy", instance.isHealthy() + "");
|
metadata.put("nacos.healthy", instance.isHealthy() + "");
|
||||||
metadata.put("nacos.cluster", instance.getClusterName() + "");
|
metadata.put("nacos.cluster", instance.getClusterName() + "");
|
||||||
metadata.putAll(instance.getMetadata());
|
if (instance.getMetadata() != null) {
|
||||||
|
metadata.putAll(instance.getMetadata());
|
||||||
|
}
|
||||||
|
metadata.put("nacos.ephemeral", String.valueOf(instance.isEphemeral()));
|
||||||
nacosServiceInstance.setMetadata(metadata);
|
nacosServiceInstance.setMetadata(metadata);
|
||||||
|
|
||||||
if (metadata.containsKey("secure")) {
|
if (metadata.containsKey("secure")) {
|
||||||
@ -102,4 +111,9 @@ public class NacosServiceDiscovery {
|
|||||||
return nacosServiceInstance;
|
return nacosServiceInstance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private NamingService namingService() {
|
||||||
|
return nacosServiceManager
|
||||||
|
.getNamingService(discoveryProperties.getNacosProperties());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -16,11 +16,23 @@
|
|||||||
|
|
||||||
package com.alibaba.cloud.nacos.discovery;
|
package com.alibaba.cloud.nacos.discovery;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.ScheduledFuture;
|
import java.util.concurrent.ScheduledFuture;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
|
||||||
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
|
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
|
||||||
|
import com.alibaba.cloud.nacos.NacosServiceManager;
|
||||||
|
import com.alibaba.nacos.api.exception.NacosException;
|
||||||
|
import com.alibaba.nacos.api.naming.NamingService;
|
||||||
|
import com.alibaba.nacos.api.naming.listener.Event;
|
||||||
|
import com.alibaba.nacos.api.naming.listener.EventListener;
|
||||||
|
import com.alibaba.nacos.api.naming.listener.NamingEvent;
|
||||||
|
import com.alibaba.nacos.api.naming.pojo.Instance;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@ -34,47 +46,39 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @author xiaojing
|
* @author xiaojing
|
||||||
|
* @author yuhuangbin
|
||||||
*/
|
*/
|
||||||
public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycle {
|
public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycle {
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(NacosWatch.class);
|
private static final Logger log = LoggerFactory.getLogger(NacosWatch.class);
|
||||||
|
|
||||||
private final NacosDiscoveryProperties properties;
|
private Map<String, EventListener> listenerMap = new ConcurrentHashMap<>(16);
|
||||||
|
|
||||||
private final TaskScheduler taskScheduler;
|
|
||||||
|
|
||||||
private final AtomicLong nacosWatchIndex = new AtomicLong(0);
|
|
||||||
|
|
||||||
private final AtomicBoolean running = new AtomicBoolean(false);
|
private final AtomicBoolean running = new AtomicBoolean(false);
|
||||||
|
|
||||||
|
private final AtomicLong nacosWatchIndex = new AtomicLong(0);
|
||||||
|
|
||||||
private ApplicationEventPublisher publisher;
|
private ApplicationEventPublisher publisher;
|
||||||
|
|
||||||
private ScheduledFuture<?> watchFuture;
|
private ScheduledFuture<?> watchFuture;
|
||||||
|
|
||||||
public NacosWatch(NacosDiscoveryProperties properties) {
|
private NacosServiceManager nacosServiceManager;
|
||||||
this(properties, getTaskScheduler());
|
|
||||||
}
|
|
||||||
|
|
||||||
public NacosWatch(NacosDiscoveryProperties properties, TaskScheduler taskScheduler) {
|
private final NacosDiscoveryProperties properties;
|
||||||
this.properties = properties;
|
|
||||||
this.taskScheduler = taskScheduler;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
private final TaskScheduler taskScheduler;
|
||||||
* The constructor with {@link NacosDiscoveryProperties} bean and the optional.
|
|
||||||
* {@link TaskScheduler} bean
|
public NacosWatch(NacosServiceManager nacosServiceManager,
|
||||||
* @param properties {@link NacosDiscoveryProperties} bean
|
NacosDiscoveryProperties properties,
|
||||||
* @param taskScheduler the optional {@link TaskScheduler} bean
|
|
||||||
* @since 2.2.0
|
|
||||||
*/
|
|
||||||
public NacosWatch(NacosDiscoveryProperties properties,
|
|
||||||
ObjectProvider<TaskScheduler> taskScheduler) {
|
ObjectProvider<TaskScheduler> taskScheduler) {
|
||||||
this(properties, taskScheduler.getIfAvailable(NacosWatch::getTaskScheduler));
|
this.nacosServiceManager = nacosServiceManager;
|
||||||
|
this.properties = properties;
|
||||||
|
this.taskScheduler = taskScheduler.getIfAvailable(NacosWatch::getTaskScheduler);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ThreadPoolTaskScheduler getTaskScheduler() {
|
private static ThreadPoolTaskScheduler getTaskScheduler() {
|
||||||
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
|
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
|
||||||
taskScheduler.setBeanName("Nacso-Watch-Task-Scheduler");
|
taskScheduler.setBeanName("Nacos-Watch-Task-Scheduler");
|
||||||
taskScheduler.initialize();
|
taskScheduler.initialize();
|
||||||
return taskScheduler;
|
return taskScheduler;
|
||||||
}
|
}
|
||||||
@ -98,19 +102,75 @@ public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycl
|
|||||||
@Override
|
@Override
|
||||||
public void start() {
|
public void start() {
|
||||||
if (this.running.compareAndSet(false, true)) {
|
if (this.running.compareAndSet(false, true)) {
|
||||||
|
EventListener eventListener = listenerMap.computeIfAbsent(buildKey(),
|
||||||
|
event -> new EventListener() {
|
||||||
|
@Override
|
||||||
|
public void onEvent(Event event) {
|
||||||
|
if (event instanceof NamingEvent) {
|
||||||
|
List<Instance> instances = ((NamingEvent) event)
|
||||||
|
.getInstances();
|
||||||
|
Optional<Instance> instanceOptional = selectCurrentInstance(
|
||||||
|
instances);
|
||||||
|
instanceOptional.ifPresent(currentInstance -> {
|
||||||
|
resetIfNeeded(currentInstance);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
NamingService namingService = nacosServiceManager
|
||||||
|
.getNamingService(properties.getNacosProperties());
|
||||||
|
try {
|
||||||
|
namingService.subscribe(properties.getService(), properties.getGroup(),
|
||||||
|
Arrays.asList(properties.getClusterName()), eventListener);
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
log.error("namingService subscribe failed, properties:{}", properties, e);
|
||||||
|
}
|
||||||
|
|
||||||
this.watchFuture = this.taskScheduler.scheduleWithFixedDelay(
|
this.watchFuture = this.taskScheduler.scheduleWithFixedDelay(
|
||||||
this::nacosServicesWatch, this.properties.getWatchDelay());
|
this::nacosServicesWatch, this.properties.getWatchDelay());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String buildKey() {
|
||||||
|
return String.join(":", properties.getService(), properties.getGroup());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void resetIfNeeded(Instance instance) {
|
||||||
|
if (!properties.getMetadata().equals(instance.getMetadata())) {
|
||||||
|
properties.setMetadata(instance.getMetadata());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Optional<Instance> selectCurrentInstance(List<Instance> instances) {
|
||||||
|
return instances.stream()
|
||||||
|
.filter(instance -> properties.getIp().equals(instance.getIp())
|
||||||
|
&& properties.getPort() == instance.getPort())
|
||||||
|
.findFirst();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void stop() {
|
public void stop() {
|
||||||
if (this.running.compareAndSet(true, false) && this.watchFuture != null) {
|
if (this.running.compareAndSet(true, false)) {
|
||||||
// shutdown current user-thread,
|
if (this.watchFuture != null) {
|
||||||
// then the other daemon-threads will terminate automatic.
|
// shutdown current user-thread,
|
||||||
((ThreadPoolTaskScheduler) this.taskScheduler).shutdown();
|
// then the other daemon-threads will terminate automatic.
|
||||||
|
((ThreadPoolTaskScheduler) this.taskScheduler).shutdown();
|
||||||
|
this.watchFuture.cancel(true);
|
||||||
|
}
|
||||||
|
|
||||||
this.watchFuture.cancel(true);
|
EventListener eventListener = listenerMap.get(buildKey());
|
||||||
|
try {
|
||||||
|
NamingService namingService = nacosServiceManager
|
||||||
|
.getNamingService(properties.getNacosProperties());
|
||||||
|
namingService.unsubscribe(properties.getService(), properties.getGroup(),
|
||||||
|
Arrays.asList(properties.getClusterName()), eventListener);
|
||||||
|
}
|
||||||
|
catch (NacosException e) {
|
||||||
|
log.error("namingService unsubscribe failed, properties:{}", properties,
|
||||||
|
e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,7 +26,6 @@ import org.springframework.boot.actuate.health.HealthIndicator;
|
|||||||
* The {@link HealthIndicator} for Nacos Discovery.
|
* The {@link HealthIndicator} for Nacos Discovery.
|
||||||
*
|
*
|
||||||
* @author <a href="mailto:mercyblitz@gmail.com">Mercy</a>
|
* @author <a href="mailto:mercyblitz@gmail.com">Mercy</a>
|
||||||
* @since 2.2.0
|
|
||||||
* @see HealthIndicator
|
* @see HealthIndicator
|
||||||
*/
|
*/
|
||||||
public class NacosDiscoveryHealthIndicator extends AbstractHealthIndicator {
|
public class NacosDiscoveryHealthIndicator extends AbstractHealthIndicator {
|
||||||
|
@ -22,6 +22,7 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
|
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
|
||||||
|
import com.alibaba.cloud.nacos.NacosServiceManager;
|
||||||
import com.alibaba.nacos.api.naming.NamingService;
|
import com.alibaba.nacos.api.naming.NamingService;
|
||||||
import com.alibaba.nacos.api.naming.pojo.ServiceInfo;
|
import com.alibaba.nacos.api.naming.pojo.ServiceInfo;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
@ -41,9 +42,13 @@ public class NacosDiscoveryEndpoint {
|
|||||||
private static final Logger log = LoggerFactory
|
private static final Logger log = LoggerFactory
|
||||||
.getLogger(NacosDiscoveryEndpoint.class);
|
.getLogger(NacosDiscoveryEndpoint.class);
|
||||||
|
|
||||||
|
private NacosServiceManager nacosServiceManager;
|
||||||
|
|
||||||
private NacosDiscoveryProperties nacosDiscoveryProperties;
|
private NacosDiscoveryProperties nacosDiscoveryProperties;
|
||||||
|
|
||||||
public NacosDiscoveryEndpoint(NacosDiscoveryProperties nacosDiscoveryProperties) {
|
public NacosDiscoveryEndpoint(NacosServiceManager nacosServiceManager,
|
||||||
|
NacosDiscoveryProperties nacosDiscoveryProperties) {
|
||||||
|
this.nacosServiceManager = nacosServiceManager;
|
||||||
this.nacosDiscoveryProperties = nacosDiscoveryProperties;
|
this.nacosDiscoveryProperties = nacosDiscoveryProperties;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -55,7 +60,8 @@ public class NacosDiscoveryEndpoint {
|
|||||||
Map<String, Object> result = new HashMap<>();
|
Map<String, Object> result = new HashMap<>();
|
||||||
result.put("NacosDiscoveryProperties", nacosDiscoveryProperties);
|
result.put("NacosDiscoveryProperties", nacosDiscoveryProperties);
|
||||||
|
|
||||||
NamingService namingService = nacosDiscoveryProperties.namingServiceInstance();
|
NamingService namingService = nacosServiceManager
|
||||||
|
.getNamingService(nacosDiscoveryProperties.getNacosProperties());
|
||||||
List<ServiceInfo> subscribe = Collections.emptyList();
|
List<ServiceInfo> subscribe = Collections.emptyList();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -16,8 +16,11 @@
|
|||||||
|
|
||||||
package com.alibaba.cloud.nacos.endpoint;
|
package com.alibaba.cloud.nacos.endpoint;
|
||||||
|
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
import com.alibaba.cloud.nacos.ConditionalOnNacosDiscoveryEnabled;
|
import com.alibaba.cloud.nacos.ConditionalOnNacosDiscoveryEnabled;
|
||||||
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
|
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
|
||||||
|
import com.alibaba.cloud.nacos.NacosServiceManager;
|
||||||
import com.alibaba.cloud.nacos.discovery.actuate.health.NacosDiscoveryHealthIndicator;
|
import com.alibaba.cloud.nacos.discovery.actuate.health.NacosDiscoveryHealthIndicator;
|
||||||
|
|
||||||
import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint;
|
import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint;
|
||||||
@ -44,16 +47,19 @@ public class NacosDiscoveryEndpointAutoConfiguration {
|
|||||||
@ConditionalOnMissingBean
|
@ConditionalOnMissingBean
|
||||||
@ConditionalOnEnabledEndpoint
|
@ConditionalOnEnabledEndpoint
|
||||||
public NacosDiscoveryEndpoint nacosDiscoveryEndpoint(
|
public NacosDiscoveryEndpoint nacosDiscoveryEndpoint(
|
||||||
|
NacosServiceManager nacosServiceManager,
|
||||||
NacosDiscoveryProperties nacosDiscoveryProperties) {
|
NacosDiscoveryProperties nacosDiscoveryProperties) {
|
||||||
return new NacosDiscoveryEndpoint(nacosDiscoveryProperties);
|
return new NacosDiscoveryEndpoint(nacosServiceManager, nacosDiscoveryProperties);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
@ConditionalOnEnabledHealthIndicator("nacos-discovery")
|
@ConditionalOnEnabledHealthIndicator("nacos-discovery")
|
||||||
public HealthIndicator nacosDiscoveryHealthIndicator(
|
public HealthIndicator nacosDiscoveryHealthIndicator(
|
||||||
|
NacosServiceManager nacosServiceManager,
|
||||||
NacosDiscoveryProperties nacosDiscoveryProperties) {
|
NacosDiscoveryProperties nacosDiscoveryProperties) {
|
||||||
|
Properties nacosProperties = nacosDiscoveryProperties.getNacosProperties();
|
||||||
return new NacosDiscoveryHealthIndicator(
|
return new NacosDiscoveryHealthIndicator(
|
||||||
nacosDiscoveryProperties.namingServiceInstance());
|
nacosServiceManager.getNamingService(nacosProperties));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* 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.event;
|
||||||
|
|
||||||
|
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
|
||||||
|
|
||||||
|
import org.springframework.context.ApplicationEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author yuhuangbin
|
||||||
|
*/
|
||||||
|
public class NacosDiscoveryInfoChangedEvent extends ApplicationEvent {
|
||||||
|
|
||||||
|
public NacosDiscoveryInfoChangedEvent(
|
||||||
|
NacosDiscoveryProperties nacosDiscoveryProperties) {
|
||||||
|
super(nacosDiscoveryProperties);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NacosDiscoveryProperties getSource() {
|
||||||
|
return (NacosDiscoveryProperties) super.getSource();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.alibaba.cloud.nacos.registry;
|
package com.alibaba.cloud.nacos.registry;
|
||||||
|
|
||||||
|
import com.alibaba.cloud.nacos.event.NacosDiscoveryInfoChangedEvent;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@ -23,6 +24,7 @@ import org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegis
|
|||||||
import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationProperties;
|
import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationProperties;
|
||||||
import org.springframework.cloud.client.serviceregistry.Registration;
|
import org.springframework.cloud.client.serviceregistry.Registration;
|
||||||
import org.springframework.cloud.client.serviceregistry.ServiceRegistry;
|
import org.springframework.cloud.client.serviceregistry.ServiceRegistry;
|
||||||
|
import org.springframework.context.event.EventListener;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
@ -102,4 +104,14 @@ public class NacosAutoServiceRegistration
|
|||||||
return StringUtils.isEmpty(appName) ? super.getAppName() : appName;
|
return StringUtils.isEmpty(appName) ? super.getAppName() : appName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventListener
|
||||||
|
public void onNacosDiscoveryInfoChangedEvent(NacosDiscoveryInfoChangedEvent event) {
|
||||||
|
restart();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void restart() {
|
||||||
|
this.stop();
|
||||||
|
this.start();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -17,12 +17,12 @@
|
|||||||
package com.alibaba.cloud.nacos.registry;
|
package com.alibaba.cloud.nacos.registry;
|
||||||
|
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
import javax.annotation.PostConstruct;
|
||||||
|
|
||||||
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
|
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
|
||||||
import com.alibaba.nacos.api.naming.NamingService;
|
|
||||||
import com.alibaba.nacos.api.naming.PreservedMetadataKeys;
|
import com.alibaba.nacos.api.naming.PreservedMetadataKeys;
|
||||||
|
|
||||||
import org.springframework.cloud.client.DefaultServiceInstance;
|
import org.springframework.cloud.client.DefaultServiceInstance;
|
||||||
@ -58,12 +58,16 @@ public class NacosRegistration implements Registration, ServiceInstance {
|
|||||||
*/
|
*/
|
||||||
public static final String MANAGEMENT_ENDPOINT_BASE_PATH = "management.endpoints.web.base-path";
|
public static final String MANAGEMENT_ENDPOINT_BASE_PATH = "management.endpoints.web.base-path";
|
||||||
|
|
||||||
|
private List<NacosRegistrationCustomizer> registrationCustomizers;
|
||||||
|
|
||||||
private NacosDiscoveryProperties nacosDiscoveryProperties;
|
private NacosDiscoveryProperties nacosDiscoveryProperties;
|
||||||
|
|
||||||
private ApplicationContext context;
|
private ApplicationContext context;
|
||||||
|
|
||||||
public NacosRegistration(NacosDiscoveryProperties nacosDiscoveryProperties,
|
public NacosRegistration(List<NacosRegistrationCustomizer> registrationCustomizers,
|
||||||
|
NacosDiscoveryProperties nacosDiscoveryProperties,
|
||||||
ApplicationContext context) {
|
ApplicationContext context) {
|
||||||
|
this.registrationCustomizers = registrationCustomizers;
|
||||||
this.nacosDiscoveryProperties = nacosDiscoveryProperties;
|
this.nacosDiscoveryProperties = nacosDiscoveryProperties;
|
||||||
this.context = context;
|
this.context = context;
|
||||||
}
|
}
|
||||||
@ -105,6 +109,17 @@ public class NacosRegistration implements Registration, ServiceInstance {
|
|||||||
metadata.put(PreservedMetadataKeys.IP_DELETE_TIMEOUT,
|
metadata.put(PreservedMetadataKeys.IP_DELETE_TIMEOUT,
|
||||||
nacosDiscoveryProperties.getIpDeleteTimeout().toString());
|
nacosDiscoveryProperties.getIpDeleteTimeout().toString());
|
||||||
}
|
}
|
||||||
|
customize(registrationCustomizers, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void customize(
|
||||||
|
List<NacosRegistrationCustomizer> registrationCustomizers,
|
||||||
|
NacosRegistration registration) {
|
||||||
|
if (registrationCustomizers != null) {
|
||||||
|
for (NacosRegistrationCustomizer customizer : registrationCustomizers) {
|
||||||
|
customizer.customize(registration);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -157,10 +172,6 @@ public class NacosRegistration implements Registration, ServiceInstance {
|
|||||||
return nacosDiscoveryProperties;
|
return nacosDiscoveryProperties;
|
||||||
}
|
}
|
||||||
|
|
||||||
public NamingService getNacosNamingService() {
|
|
||||||
return nacosDiscoveryProperties.namingServiceInstance();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "NacosRegistration{" + "nacosDiscoveryProperties="
|
return "NacosRegistration{" + "nacosDiscoveryProperties="
|
||||||
|
@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
* 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.registry;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author L.cm
|
||||||
|
*/
|
||||||
|
public interface NacosRegistrationCustomizer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* customize NacosRegistration.
|
||||||
|
* @param registration NacosRegistration
|
||||||
|
*/
|
||||||
|
void customize(NacosRegistration registration);
|
||||||
|
|
||||||
|
}
|
@ -17,13 +17,17 @@
|
|||||||
package com.alibaba.cloud.nacos.registry;
|
package com.alibaba.cloud.nacos.registry;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
|
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
|
||||||
|
import com.alibaba.cloud.nacos.NacosServiceManager;
|
||||||
|
import com.alibaba.nacos.api.exception.NacosException;
|
||||||
import com.alibaba.nacos.api.naming.NamingService;
|
import com.alibaba.nacos.api.naming.NamingService;
|
||||||
import com.alibaba.nacos.api.naming.pojo.Instance;
|
import com.alibaba.nacos.api.naming.pojo.Instance;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.cloud.client.serviceregistry.Registration;
|
import org.springframework.cloud.client.serviceregistry.Registration;
|
||||||
import org.springframework.cloud.client.serviceregistry.ServiceRegistry;
|
import org.springframework.cloud.client.serviceregistry.ServiceRegistry;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
@ -33,6 +37,7 @@ import static org.springframework.util.ReflectionUtils.rethrowRuntimeException;
|
|||||||
/**
|
/**
|
||||||
* @author xiaojing
|
* @author xiaojing
|
||||||
* @author <a href="mailto:mercyblitz@gmail.com">Mercy</a>
|
* @author <a href="mailto:mercyblitz@gmail.com">Mercy</a>
|
||||||
|
* @author <a href="mailto:78552423@qq.com">eshun</a>
|
||||||
*/
|
*/
|
||||||
public class NacosServiceRegistry implements ServiceRegistry<Registration> {
|
public class NacosServiceRegistry implements ServiceRegistry<Registration> {
|
||||||
|
|
||||||
@ -40,11 +45,11 @@ public class NacosServiceRegistry implements ServiceRegistry<Registration> {
|
|||||||
|
|
||||||
private final NacosDiscoveryProperties nacosDiscoveryProperties;
|
private final NacosDiscoveryProperties nacosDiscoveryProperties;
|
||||||
|
|
||||||
private final NamingService namingService;
|
@Autowired
|
||||||
|
private NacosServiceManager nacosServiceManager;
|
||||||
|
|
||||||
public NacosServiceRegistry(NacosDiscoveryProperties nacosDiscoveryProperties) {
|
public NacosServiceRegistry(NacosDiscoveryProperties nacosDiscoveryProperties) {
|
||||||
this.nacosDiscoveryProperties = nacosDiscoveryProperties;
|
this.nacosDiscoveryProperties = nacosDiscoveryProperties;
|
||||||
this.namingService = nacosDiscoveryProperties.namingServiceInstance();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -55,6 +60,7 @@ public class NacosServiceRegistry implements ServiceRegistry<Registration> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NamingService namingService = namingService();
|
||||||
String serviceId = registration.getServiceId();
|
String serviceId = registration.getServiceId();
|
||||||
String group = nacosDiscoveryProperties.getGroup();
|
String group = nacosDiscoveryProperties.getGroup();
|
||||||
|
|
||||||
@ -84,7 +90,7 @@ public class NacosServiceRegistry implements ServiceRegistry<Registration> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
NamingService namingService = nacosDiscoveryProperties.namingServiceInstance();
|
NamingService namingService = namingService();
|
||||||
String serviceId = registration.getServiceId();
|
String serviceId = registration.getServiceId();
|
||||||
String group = nacosDiscoveryProperties.getGroup();
|
String group = nacosDiscoveryProperties.getGroup();
|
||||||
|
|
||||||
@ -102,7 +108,12 @@ public class NacosServiceRegistry implements ServiceRegistry<Registration> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void close() {
|
public void close() {
|
||||||
|
try {
|
||||||
|
nacosServiceManager.nacosServiceShutDown();
|
||||||
|
}
|
||||||
|
catch (NacosException e) {
|
||||||
|
log.error("Nacos namingService shutDown failed", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -125,7 +136,8 @@ public class NacosServiceRegistry implements ServiceRegistry<Registration> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
nacosDiscoveryProperties.namingMaintainServiceInstance()
|
Properties nacosProperties = nacosDiscoveryProperties.getNacosProperties();
|
||||||
|
nacosServiceManager.getNamingMaintainService(nacosProperties)
|
||||||
.updateInstance(serviceId, instance);
|
.updateInstance(serviceId, instance);
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
@ -139,8 +151,7 @@ public class NacosServiceRegistry implements ServiceRegistry<Registration> {
|
|||||||
|
|
||||||
String serviceName = registration.getServiceId();
|
String serviceName = registration.getServiceId();
|
||||||
try {
|
try {
|
||||||
List<Instance> instances = nacosDiscoveryProperties.namingServiceInstance()
|
List<Instance> instances = namingService().getAllInstances(serviceName);
|
||||||
.getAllInstances(serviceName);
|
|
||||||
for (Instance instance : instances) {
|
for (Instance instance : instances) {
|
||||||
if (instance.getIp().equalsIgnoreCase(nacosDiscoveryProperties.getIp())
|
if (instance.getIp().equalsIgnoreCase(nacosDiscoveryProperties.getIp())
|
||||||
&& instance.getPort() == nacosDiscoveryProperties.getPort()) {
|
&& instance.getPort() == nacosDiscoveryProperties.getPort()) {
|
||||||
@ -160,9 +171,15 @@ public class NacosServiceRegistry implements ServiceRegistry<Registration> {
|
|||||||
instance.setPort(registration.getPort());
|
instance.setPort(registration.getPort());
|
||||||
instance.setWeight(nacosDiscoveryProperties.getWeight());
|
instance.setWeight(nacosDiscoveryProperties.getWeight());
|
||||||
instance.setClusterName(nacosDiscoveryProperties.getClusterName());
|
instance.setClusterName(nacosDiscoveryProperties.getClusterName());
|
||||||
|
instance.setEnabled(nacosDiscoveryProperties.isInstanceEnabled());
|
||||||
instance.setMetadata(registration.getMetadata());
|
instance.setMetadata(registration.getMetadata());
|
||||||
|
instance.setEphemeral(nacosDiscoveryProperties.isEphemeral());
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private NamingService namingService() {
|
||||||
|
return nacosServiceManager
|
||||||
|
.getNamingService(nacosDiscoveryProperties.getNacosProperties());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -16,10 +16,13 @@
|
|||||||
|
|
||||||
package com.alibaba.cloud.nacos.registry;
|
package com.alibaba.cloud.nacos.registry;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import com.alibaba.cloud.nacos.ConditionalOnNacosDiscoveryEnabled;
|
import com.alibaba.cloud.nacos.ConditionalOnNacosDiscoveryEnabled;
|
||||||
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
|
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
|
||||||
import com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration;
|
import com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.ObjectProvider;
|
||||||
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
@ -53,9 +56,11 @@ public class NacosServiceRegistryAutoConfiguration {
|
|||||||
@Bean
|
@Bean
|
||||||
@ConditionalOnBean(AutoServiceRegistrationProperties.class)
|
@ConditionalOnBean(AutoServiceRegistrationProperties.class)
|
||||||
public NacosRegistration nacosRegistration(
|
public NacosRegistration nacosRegistration(
|
||||||
|
ObjectProvider<List<NacosRegistrationCustomizer>> registrationCustomizers,
|
||||||
NacosDiscoveryProperties nacosDiscoveryProperties,
|
NacosDiscoveryProperties nacosDiscoveryProperties,
|
||||||
ApplicationContext context) {
|
ApplicationContext context) {
|
||||||
return new NacosRegistration(nacosDiscoveryProperties, context);
|
return new NacosRegistration(registrationCustomizers.getIfAvailable(),
|
||||||
|
nacosDiscoveryProperties, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
|
@ -21,6 +21,7 @@ import java.util.Objects;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
|
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
|
||||||
|
import com.alibaba.cloud.nacos.NacosServiceManager;
|
||||||
import com.alibaba.nacos.api.naming.NamingService;
|
import com.alibaba.nacos.api.naming.NamingService;
|
||||||
import com.alibaba.nacos.api.naming.pojo.Instance;
|
import com.alibaba.nacos.api.naming.pojo.Instance;
|
||||||
import com.netflix.client.config.IClientConfig;
|
import com.netflix.client.config.IClientConfig;
|
||||||
@ -47,16 +48,20 @@ public class NacosRule extends AbstractLoadBalancerRule {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private NacosDiscoveryProperties nacosDiscoveryProperties;
|
private NacosDiscoveryProperties nacosDiscoveryProperties;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private NacosServiceManager nacosServiceManager;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Server choose(Object key) {
|
public Server choose(Object key) {
|
||||||
try {
|
try {
|
||||||
String clusterName = this.nacosDiscoveryProperties.getClusterName();
|
String clusterName = this.nacosDiscoveryProperties.getClusterName();
|
||||||
|
String group = this.nacosDiscoveryProperties.getGroup();
|
||||||
DynamicServerListLoadBalancer loadBalancer = (DynamicServerListLoadBalancer) getLoadBalancer();
|
DynamicServerListLoadBalancer loadBalancer = (DynamicServerListLoadBalancer) getLoadBalancer();
|
||||||
String name = loadBalancer.getName();
|
String name = loadBalancer.getName();
|
||||||
|
|
||||||
NamingService namingService = nacosDiscoveryProperties
|
NamingService namingService = nacosServiceManager
|
||||||
.namingServiceInstance();
|
.getNamingService(nacosDiscoveryProperties.getNacosProperties());
|
||||||
List<Instance> instances = namingService.selectInstances(name, true);
|
List<Instance> instances = namingService.selectInstances(name, group, true);
|
||||||
if (CollectionUtils.isEmpty(instances)) {
|
if (CollectionUtils.isEmpty(instances)) {
|
||||||
LOGGER.warn("no instance in service {}", name);
|
LOGGER.warn("no instance in service {}", name);
|
||||||
return null;
|
return null;
|
||||||
|
@ -1,60 +1,72 @@
|
|||||||
{"properties": [
|
{"properties": [
|
||||||
{
|
{
|
||||||
"name": "spring.cloud.nacos.server-addr",
|
"name": "spring.cloud.nacos.server-addr",
|
||||||
"type": "java.lang.String",
|
"type": "java.lang.String",
|
||||||
"defaultValue": "localhost:8848",
|
"defaultValue": "localhost:8848",
|
||||||
"description": "nacos server address."
|
"description": "nacos server address."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "spring.cloud.nacos.discovery.server-addr",
|
"name": "spring.cloud.nacos.discovery.server-addr",
|
||||||
"type": "java.lang.String",
|
"type": "java.lang.String",
|
||||||
"defaultValue": "${spring.cloud.nacos.server-addr}",
|
"defaultValue": "${spring.cloud.nacos.server-addr}",
|
||||||
"description": "nacos discovery server address."
|
"description": "nacos discovery server address."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "spring.cloud.nacos.discovery.service",
|
"name": "spring.cloud.nacos.discovery.service",
|
||||||
"type": "java.lang.String",
|
"type": "java.lang.String",
|
||||||
"defaultValue": "${spring.application.name}",
|
"defaultValue": "${spring.application.name}",
|
||||||
"description": "the service name to register, default value is ${spring.application.name}."
|
"description": "the service name to register, default value is ${spring.application.name}."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "spring.cloud.nacos.discovery.enabled",
|
"name": "spring.cloud.nacos.discovery.enabled",
|
||||||
"type": "java.lang.Boolean",
|
"type": "java.lang.Boolean",
|
||||||
"defaultValue": true,
|
"defaultValue": true,
|
||||||
"description": "enable nacos discovery or not."
|
"description": "enable nacos discovery or not."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "spring.cloud.nacos.discovery.namingLoadCacheAtStart",
|
"name": "spring.cloud.nacos.discovery.instance-enabled",
|
||||||
"type": "java.lang.Boolean",
|
"type": "java.lang.Boolean",
|
||||||
"defaultValue": "false",
|
"defaultValue": true,
|
||||||
"description": "naming load from local cache at application start ."
|
"description": "If instance is enabled to accept request. The default value is true."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "spring.cloud.nacos.discovery.watch.enabled",
|
"name": "spring.cloud.nacos.discovery.ephemeral",
|
||||||
"type": "java.lang.Boolean",
|
"type": "java.lang.Boolean",
|
||||||
"defaultValue": "true",
|
"defaultValue": true,
|
||||||
"description": "enable nacos discovery watch or not ."
|
"description": "If instance is ephemeral.The default value is true."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "spring.cloud.nacos.discovery.username",
|
"name": "spring.cloud.nacos.discovery.namingLoadCacheAtStart",
|
||||||
"type": "java.lang.String",
|
"type": "java.lang.Boolean",
|
||||||
"defaultValue": "${spring.cloud.nacos.username}",
|
"defaultValue": "false",
|
||||||
"description": "nacos discovery service's username to authenticate."
|
"description": "naming load from local cache at application start ."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "spring.cloud.nacos.discovery.password",
|
"name": "spring.cloud.nacos.discovery.watch.enabled",
|
||||||
"type": "java.lang.String",
|
"type": "java.lang.Boolean",
|
||||||
"defaultValue": "${spring.cloud.nacos.password}",
|
"defaultValue": "true",
|
||||||
"description": "nacos discovery service's password to authenticate."
|
"description": "enable nacos discovery watch or not ."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "spring.cloud.nacos.username",
|
"name": "spring.cloud.nacos.discovery.username",
|
||||||
"type": "java.lang.String",
|
"type": "java.lang.String",
|
||||||
"description": "nacos userName to authenticate."
|
"defaultValue": "${spring.cloud.nacos.username}",
|
||||||
},
|
"description": "nacos discovery service's username to authenticate."
|
||||||
{
|
},
|
||||||
"name": "spring.cloud.nacos.password",
|
{
|
||||||
"type": "java.lang.String",
|
"name": "spring.cloud.nacos.discovery.password",
|
||||||
"description": "nacos password to authenticate."
|
"type": "java.lang.String",
|
||||||
}
|
"defaultValue": "${spring.cloud.nacos.password}",
|
||||||
|
"description": "nacos discovery service's password to authenticate."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "spring.cloud.nacos.username",
|
||||||
|
"type": "java.lang.String",
|
||||||
|
"description": "nacos userName to authenticate."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "spring.cloud.nacos.password",
|
||||||
|
"type": "java.lang.String",
|
||||||
|
"description": "nacos password to authenticate."
|
||||||
|
}
|
||||||
]}
|
]}
|
||||||
|
@ -4,6 +4,7 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
|||||||
com.alibaba.cloud.nacos.endpoint.NacosDiscoveryEndpointAutoConfiguration,\
|
com.alibaba.cloud.nacos.endpoint.NacosDiscoveryEndpointAutoConfiguration,\
|
||||||
com.alibaba.cloud.nacos.registry.NacosServiceRegistryAutoConfiguration,\
|
com.alibaba.cloud.nacos.registry.NacosServiceRegistryAutoConfiguration,\
|
||||||
com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration,\
|
com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration,\
|
||||||
|
com.alibaba.cloud.nacos.NacosServiceAutoConfiguration,\
|
||||||
com.alibaba.cloud.nacos.discovery.configclient.NacosConfigServerAutoConfiguration
|
com.alibaba.cloud.nacos.discovery.configclient.NacosConfigServerAutoConfiguration
|
||||||
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
|
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
|
||||||
com.alibaba.cloud.nacos.discovery.configclient.NacosDiscoveryClientConfigServiceBootstrapConfiguration
|
com.alibaba.cloud.nacos.discovery.configclient.NacosDiscoveryClientConfigServiceBootstrapConfiguration
|
||||||
|
@ -22,6 +22,7 @@ import java.util.LinkedList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
|
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
|
||||||
|
import com.alibaba.cloud.nacos.NacosServiceManager;
|
||||||
import com.alibaba.nacos.api.exception.NacosException;
|
import com.alibaba.nacos.api.exception.NacosException;
|
||||||
import com.alibaba.nacos.api.naming.NamingService;
|
import com.alibaba.nacos.api.naming.NamingService;
|
||||||
import com.alibaba.nacos.api.naming.pojo.Instance;
|
import com.alibaba.nacos.api.naming.pojo.Instance;
|
||||||
@ -60,16 +61,19 @@ public class NacosServiceDiscoveryTest {
|
|||||||
|
|
||||||
NacosDiscoveryProperties nacosDiscoveryProperties = mock(
|
NacosDiscoveryProperties nacosDiscoveryProperties = mock(
|
||||||
NacosDiscoveryProperties.class);
|
NacosDiscoveryProperties.class);
|
||||||
|
NacosServiceManager nacosServiceManager = mock(NacosServiceManager.class);
|
||||||
|
|
||||||
NamingService namingService = mock(NamingService.class);
|
NamingService namingService = mock(NamingService.class);
|
||||||
|
|
||||||
when(nacosDiscoveryProperties.namingServiceInstance()).thenReturn(namingService);
|
when(nacosServiceManager
|
||||||
|
.getNamingService(nacosDiscoveryProperties.getNacosProperties()))
|
||||||
|
.thenReturn(namingService);
|
||||||
when(nacosDiscoveryProperties.getGroup()).thenReturn("DEFAULT");
|
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);
|
.thenReturn(instances);
|
||||||
|
|
||||||
NacosServiceDiscovery serviceDiscovery = new NacosServiceDiscovery(
|
NacosServiceDiscovery serviceDiscovery = new NacosServiceDiscovery(
|
||||||
nacosDiscoveryProperties);
|
nacosDiscoveryProperties, nacosServiceManager);
|
||||||
|
|
||||||
List<ServiceInstance> serviceInstances = serviceDiscovery
|
List<ServiceInstance> serviceInstances = serviceDiscovery
|
||||||
.getInstances(serviceName);
|
.getInstances(serviceName);
|
||||||
@ -99,16 +103,19 @@ public class NacosServiceDiscoveryTest {
|
|||||||
|
|
||||||
NacosDiscoveryProperties nacosDiscoveryProperties = mock(
|
NacosDiscoveryProperties nacosDiscoveryProperties = mock(
|
||||||
NacosDiscoveryProperties.class);
|
NacosDiscoveryProperties.class);
|
||||||
|
NacosServiceManager nacosServiceManager = mock(NacosServiceManager.class);
|
||||||
|
|
||||||
NamingService namingService = mock(NamingService.class);
|
NamingService namingService = mock(NamingService.class);
|
||||||
|
|
||||||
when(nacosDiscoveryProperties.namingServiceInstance()).thenReturn(namingService);
|
when(nacosServiceManager
|
||||||
|
.getNamingService(nacosDiscoveryProperties.getNacosProperties()))
|
||||||
|
.thenReturn(namingService);
|
||||||
when(nacosDiscoveryProperties.getGroup()).thenReturn("DEFAULT");
|
when(nacosDiscoveryProperties.getGroup()).thenReturn("DEFAULT");
|
||||||
when(namingService.getServicesOfServer(eq(1), eq(Integer.MAX_VALUE),
|
when(namingService.getServicesOfServer(eq(1), eq(Integer.MAX_VALUE),
|
||||||
eq("DEFAULT"))).thenReturn(nacosServices);
|
eq("DEFAULT"))).thenReturn(nacosServices);
|
||||||
|
|
||||||
NacosServiceDiscovery serviceDiscovery = new NacosServiceDiscovery(
|
NacosServiceDiscovery serviceDiscovery = new NacosServiceDiscovery(
|
||||||
nacosDiscoveryProperties);
|
nacosDiscoveryProperties, nacosServiceManager);
|
||||||
|
|
||||||
List<String> services = serviceDiscovery.getServices();
|
List<String> services = serviceDiscovery.getServices();
|
||||||
|
|
||||||
|
@ -328,4 +328,9 @@ public class MockNamingService implements NamingService {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void shutDown() throws NacosException {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,7 @@ import java.util.Map;
|
|||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
|
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
|
||||||
|
import com.alibaba.cloud.nacos.NacosServiceManager;
|
||||||
import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration;
|
import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration;
|
||||||
import com.alibaba.cloud.nacos.endpoint.NacosDiscoveryEndpoint;
|
import com.alibaba.cloud.nacos.endpoint.NacosDiscoveryEndpoint;
|
||||||
import com.alibaba.nacos.api.NacosFactory;
|
import com.alibaba.nacos.api.NacosFactory;
|
||||||
@ -85,6 +86,9 @@ public class NacosAutoServiceRegistrationTests {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private NacosDiscoveryProperties properties;
|
private NacosDiscoveryProperties properties;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private NacosServiceManager nacosServiceManager;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private InetUtils inetUtils;
|
private InetUtils inetUtils;
|
||||||
|
|
||||||
@ -206,7 +210,7 @@ public class NacosAutoServiceRegistrationTests {
|
|||||||
|
|
||||||
private void checkoutEndpoint() throws Exception {
|
private void checkoutEndpoint() throws Exception {
|
||||||
NacosDiscoveryEndpoint nacosDiscoveryEndpoint = new NacosDiscoveryEndpoint(
|
NacosDiscoveryEndpoint nacosDiscoveryEndpoint = new NacosDiscoveryEndpoint(
|
||||||
properties);
|
nacosServiceManager, properties);
|
||||||
Map<String, Object> map = nacosDiscoveryEndpoint.nacosDiscovery();
|
Map<String, Object> map = nacosDiscoveryEndpoint.nacosDiscovery();
|
||||||
|
|
||||||
assertThat(properties).isEqualTo(map.get("NacosDiscoveryProperties"));
|
assertThat(properties).isEqualTo(map.get("NacosDiscoveryProperties"));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user