mirror of
https://gitee.com/mirrors/Spring-Cloud-Alibaba.git
synced 2021-06-26 13:25:11 +08:00
fix
This commit is contained in:
parent
2114262e47
commit
702831cb8f
@ -23,14 +23,13 @@ import java.util.Enumeration;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.Properties;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
|
||||
import com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration;
|
||||
import com.alibaba.cloud.nacos.event.NacosDiscoveryInfoInitializedEvent;
|
||||
import com.alibaba.nacos.api.naming.PreservedMetadataKeys;
|
||||
import com.alibaba.nacos.client.naming.utils.UtilAndComs;
|
||||
import com.alibaba.spring.util.PropertySourcesUtils;
|
||||
@ -41,6 +40,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.cloud.commons.util.InetUtils;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
||||
import org.springframework.core.env.ConfigurableEnvironment;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.util.StringUtils;
|
||||
@ -213,10 +213,7 @@ public class NacosDiscoveryProperties {
|
||||
private Environment environment;
|
||||
|
||||
@Autowired
|
||||
private NacosServiceManager nacosServiceManager;
|
||||
|
||||
@Autowired
|
||||
private Optional<NacosAutoServiceRegistration> nacosAutoServiceRegistrationOptional;
|
||||
private ApplicationEventPublisher applicationEventPublisher;
|
||||
|
||||
@PostConstruct
|
||||
public void init() throws Exception {
|
||||
@ -267,13 +264,8 @@ public class NacosDiscoveryProperties {
|
||||
|
||||
this.overrideFromEnv(environment);
|
||||
|
||||
nacosAutoServiceRegistrationOptional.ifPresent(nacosAutoServiceRegistration -> {
|
||||
if (nacosServiceManager.isNacosDiscoveryInfoChanged(this)) {
|
||||
nacosAutoServiceRegistration.stop();
|
||||
nacosServiceManager.reBuildNacosService(getNacosProperties());
|
||||
nacosAutoServiceRegistration.start();
|
||||
}
|
||||
});
|
||||
applicationEventPublisher
|
||||
.publishEvent(new NacosDiscoveryInfoInitializedEvent(this));
|
||||
}
|
||||
|
||||
public String getEndpoint() {
|
||||
|
@ -17,13 +17,17 @@
|
||||
package com.alibaba.cloud.nacos;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.Properties;
|
||||
|
||||
import com.alibaba.cloud.nacos.event.NacosDiscoveryInfoInitializedEvent;
|
||||
import com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration;
|
||||
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.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.cloud.client.discovery.event.InstancePreRegisteredEvent;
|
||||
import org.springframework.cloud.client.serviceregistry.Registration;
|
||||
import org.springframework.context.event.EventListener;
|
||||
@ -43,6 +47,9 @@ public class NacosServiceManager {
|
||||
|
||||
private NamingMaintainService namingMaintainService;
|
||||
|
||||
@Autowired
|
||||
private Optional<NacosAutoServiceRegistration> nacosAutoServiceRegistrationOptional;
|
||||
|
||||
public NamingService getNamingService(Properties properties) {
|
||||
if (Objects.isNull(this.namingService)) {
|
||||
buildNamingService(properties);
|
||||
@ -107,7 +114,7 @@ public class NacosServiceManager {
|
||||
}
|
||||
}
|
||||
|
||||
public void reBuildNacosService(Properties nacosProperties) {
|
||||
private void reBuildNacosService(Properties nacosProperties) {
|
||||
namingService = createNewNamingService(nacosProperties);
|
||||
namingMaintainService = createNamingMaintainService(nacosProperties);
|
||||
}
|
||||
@ -130,4 +137,19 @@ public class NacosServiceManager {
|
||||
}
|
||||
}
|
||||
|
||||
@EventListener
|
||||
public void onNacosDiscoveryInfoInitializedEvent(
|
||||
NacosDiscoveryInfoInitializedEvent nacosDiscoveryInfoInitializedEvent) {
|
||||
NacosDiscoveryProperties nacosDiscoveryProperties = nacosDiscoveryInfoInitializedEvent
|
||||
.getSource();
|
||||
if (isNacosDiscoveryInfoChanged(nacosDiscoveryProperties)
|
||||
&& nacosAutoServiceRegistrationOptional.isPresent()) {
|
||||
NacosAutoServiceRegistration nacosAutoServiceRegistration = nacosAutoServiceRegistrationOptional
|
||||
.get();
|
||||
nacosAutoServiceRegistration.stop();
|
||||
reBuildNacosService(nacosDiscoveryProperties.getNacosProperties());
|
||||
nacosAutoServiceRegistration.start();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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 NacosDiscoveryInfoInitializedEvent extends ApplicationEvent {
|
||||
|
||||
public NacosDiscoveryInfoInitializedEvent(
|
||||
NacosDiscoveryProperties nacosDiscoveryProperties) {
|
||||
super(nacosDiscoveryProperties);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NacosDiscoveryProperties getSource() {
|
||||
return (NacosDiscoveryProperties) super.getSource();
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user