Fix bug in the programmatic service registration

This commit is contained in:
hongqiaowei
2021-10-29 12:20:50 +08:00
parent ced08a6eff
commit 40c32aa603
4 changed files with 84 additions and 57 deletions

View File

@@ -19,12 +19,14 @@ package we.api.pairing;
import com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration;
import lombok.SneakyThrows;
import org.apache.commons.lang3.StringUtils;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext;
import org.springframework.cloud.client.ConditionalOnDiscoveryEnabled;
import org.springframework.cloud.client.serviceregistry.Registration;
import org.springframework.cloud.client.serviceregistry.ServiceRegistry;
import org.springframework.cloud.commons.util.InetUtils;
import org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Configuration;
@@ -63,6 +65,7 @@ public class ApiPairingServiceRegistration implements ApplicationListener<FizzAp
String prefix = SystemConfig.FIZZ_API_PAIRING_CLIENT_PREFIX + ".service-registration";
String type = env.getProperty(prefix + ".type");
if (StringUtils.isNotBlank(type)) {
if ("eureka".equals(type)) {
String application = env.getProperty(prefix + ".application");
String ipAddress = env.getProperty(prefix + ".ip-address");
@@ -95,7 +98,7 @@ public class ApiPairingServiceRegistration implements ApplicationListener<FizzAp
fizzNacosProperties.setApplicationContext(applicationContext);
fizzNacosProperties.setId(application + ':' + serviceUrl);
fizzNacosProperties.setService(application);
fizzNacosProperties.setIp(ipAddress);
fizzNacosProperties.setIp(ipAddress == null ? applicationContext.getBean(InetUtils.class).findFirstNonLoopbackAddress().getHostAddress() : ipAddress);
fizzNacosProperties.setPort(Integer.parseInt(port));
fizzNacosProperties.setNamespace(namespace.equals("") ? null : namespace);
fizzNacosProperties.setGroup(group);
@@ -117,9 +120,12 @@ public class ApiPairingServiceRegistration implements ApplicationListener<FizzAp
serviceRegistry.register(registration);
}
}
@PreDestroy
public void stop() {
if (serviceRegistry != null) {
serviceRegistry.deregister(registration);
}
}
}

View File

@@ -45,9 +45,20 @@ public abstract class FizzEurekaHelper {
EurekaInstanceConfigBean eurekaInstanceConfig = new EurekaInstanceConfigBean(inetUtils);
eurekaInstanceConfig.setAppname(fizzEurekaProperties.appName);
eurekaInstanceConfig.setVirtualHostName(fizzEurekaProperties.getVirtualHostName());
eurekaInstanceConfig.setIpAddress(fizzEurekaProperties.ipAddress);
eurekaInstanceConfig.setNonSecurePort(fizzEurekaProperties.nonSecurePort);
eurekaInstanceConfig.setInstanceId(fizzEurekaProperties.getInstanceId());
String ip = fizzEurekaProperties.ipAddress;
String instanceId;
if (ip == null) {
ip = inetUtils.findFirstNonLoopbackAddress().getHostAddress();
instanceId = ip + ':' + fizzEurekaProperties.appName + ':' + fizzEurekaProperties.nonSecurePort;
} else {
instanceId = ip + ':' + fizzEurekaProperties.appName + ':' + fizzEurekaProperties.nonSecurePort;
fizzEurekaProperties.instanceId(instanceId);
}
eurekaInstanceConfig.setIpAddress(ip);
eurekaInstanceConfig.setInstanceId(instanceId);
eurekaInstanceConfig.setPreferIpAddress(fizzEurekaProperties.preferIpAddress);
eurekaInstanceConfig.setSecurePortEnabled(fizzEurekaProperties.securePortEnabled);
String healthCheckUrl = fizzEurekaProperties.getHealthCheckUrl();

View File

@@ -109,9 +109,9 @@ public class FizzEurekaProperties {
}
public String getInstanceId() {
if (instanceId == null) {
/*if (instanceId == null) {
instanceId = ipAddress + ':' + appName + ':' + nonSecurePort;
}
}*/
return instanceId;
}

View File

@@ -23,7 +23,6 @@ import com.alibaba.nacos.client.naming.utils.UtilAndComs;
import org.springframework.cloud.commons.util.InetUtils;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.util.StringUtils;
import we.util.JacksonUtils;
import java.net.Inet4Address;
import java.net.InetAddress;
@@ -407,7 +406,18 @@ public class FizzNacosProperties extends NacosDiscoveryProperties {
@Override
public String toString() {
return JacksonUtils.writeValueAsString(this);
return "FizzNacosProperties{" + "serverAddr='" + serverAddr + '\''
+ ", endpoint='" + endpoint + '\'' + ", namespace='" + namespace + '\''
+ ", watchDelay=" + watchDelay + ", logName='" + logName + '\''
+ ", service='" + service + '\'' + ", weight=" + weight
+ ", clusterName='" + clusterName + '\'' + ", group='" + group + '\''
+ ", namingLoadCacheAtStart='" + namingLoadCacheAtStart + '\''
+ ", metadata=" + metadata + ", registerEnabled=" + registerEnabled
+ ", ip='" + ip + '\'' + ", networkInterface='" + networkInterface + '\''
+ ", port=" + port + ", secure=" + secure + ", accessKey='" + accessKey
+ '\'' + ", secretKey='" + secretKey + '\'' + ", heartBeatInterval="
+ heartBeatInterval + ", heartBeatTimeout=" + heartBeatTimeout
+ ", ipDeleteTimeout=" + ipDeleteTimeout + ", failFast=" + failFast + '}';
}
@Override