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,63 +65,67 @@ public class ApiPairingServiceRegistration implements ApplicationListener<FizzAp
String prefix = SystemConfig.FIZZ_API_PAIRING_CLIENT_PREFIX + ".service-registration";
String type = env.getProperty(prefix + ".type");
if ("eureka".equals(type)) {
String application = env.getProperty(prefix + ".application");
String ipAddress = env.getProperty(prefix + ".ip-address");
String port = env.getProperty(prefix + ".port");
String preferIpAddress = env.getProperty(prefix + ".prefer-ip-address", "true");
String serviceUrl = env.getProperty(prefix + ".service-url");
if (StringUtils.isNotBlank(type)) {
if ("eureka".equals(type)) {
String application = env.getProperty(prefix + ".application");
String ipAddress = env.getProperty(prefix + ".ip-address");
String port = env.getProperty(prefix + ".port");
String preferIpAddress = env.getProperty(prefix + ".prefer-ip-address", "true");
String serviceUrl = env.getProperty(prefix + ".service-url");
FizzEurekaProperties fizzEurekaProperties = new FizzEurekaProperties().applicationContext(applicationContext)
.appName(application)
.ipAddress(ipAddress)
.nonSecurePort(Integer.parseInt(port))
.preferIpAddress(Boolean.parseBoolean(preferIpAddress))
.serviceUrl(serviceUrl);
FizzEurekaServiceRegistration fizzEurekaServiceRegistration = FizzEurekaHelper.getServiceRegistration(fizzEurekaProperties);
FizzEurekaProperties fizzEurekaProperties = new FizzEurekaProperties().applicationContext(applicationContext)
.appName(application)
.ipAddress(ipAddress)
.nonSecurePort(Integer.parseInt(port))
.preferIpAddress(Boolean.parseBoolean(preferIpAddress))
.serviceUrl(serviceUrl);
FizzEurekaServiceRegistration fizzEurekaServiceRegistration = FizzEurekaHelper.getServiceRegistration(fizzEurekaProperties);
serviceRegistry = fizzEurekaServiceRegistration.serviceRegistry;
registration = fizzEurekaServiceRegistration.registration;
serviceRegistry = fizzEurekaServiceRegistration.serviceRegistry;
registration = fizzEurekaServiceRegistration.registration;
}
if ("nacos".equals(type)) {
String application = env.getProperty(prefix + ".application");
String ipAddress = env.getProperty(prefix + ".ip-address");
String port = env.getProperty(prefix + ".port");
String serviceUrl = env.getProperty(prefix + ".service-url");
String namespace = env.getProperty(prefix + ".namespace", "");
String group = env.getProperty(prefix + ".group", "DEFAULT_GROUP");
String clusterName = env.getProperty(prefix + ".clusterName", "DEFAULT");
FizzNacosProperties fizzNacosProperties = new FizzNacosProperties();
fizzNacosProperties.setApplicationContext(applicationContext);
fizzNacosProperties.setId(application + ':' + serviceUrl);
fizzNacosProperties.setService(application);
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);
fizzNacosProperties.setClusterName(clusterName);
fizzNacosProperties.setNamespace("");
fizzNacosProperties.setSecretKey("");
fizzNacosProperties.setAccessKey("");
fizzNacosProperties.setUsername("");
fizzNacosProperties.setPassword("");
fizzNacosProperties.setEndpoint("");
fizzNacosProperties.setLogName("");
fizzNacosProperties.setNamingLoadCacheAtStart("false");
fizzNacosProperties.setServerAddr(serviceUrl);
FizzNacosServiceRegistration fizzNacosServiceRegistration = FizzNacosHelper.getServiceRegistration(fizzNacosProperties);
serviceRegistry = fizzNacosServiceRegistration.serviceRegistry;
registration = fizzNacosServiceRegistration.registration;
}
serviceRegistry.register(registration);
}
if ("nacos".equals(type)) {
String application = env.getProperty(prefix + ".application");
String ipAddress = env.getProperty(prefix + ".ip-address");
String port = env.getProperty(prefix + ".port");
String serviceUrl = env.getProperty(prefix + ".service-url");
String namespace = env.getProperty(prefix + ".namespace", "");
String group = env.getProperty(prefix + ".group", "DEFAULT_GROUP");
String clusterName = env.getProperty(prefix + ".clusterName", "DEFAULT");
FizzNacosProperties fizzNacosProperties = new FizzNacosProperties();
fizzNacosProperties.setApplicationContext(applicationContext);
fizzNacosProperties.setId(application + ':' + serviceUrl);
fizzNacosProperties.setService(application);
fizzNacosProperties.setIp(ipAddress);
fizzNacosProperties.setPort(Integer.parseInt(port));
fizzNacosProperties.setNamespace(namespace.equals("") ? null : namespace);
fizzNacosProperties.setGroup(group);
fizzNacosProperties.setClusterName(clusterName);
fizzNacosProperties.setNamespace("");
fizzNacosProperties.setSecretKey("");
fizzNacosProperties.setAccessKey("");
fizzNacosProperties.setUsername("");
fizzNacosProperties.setPassword("");
fizzNacosProperties.setEndpoint("");
fizzNacosProperties.setLogName("");
fizzNacosProperties.setNamingLoadCacheAtStart("false");
fizzNacosProperties.setServerAddr(serviceUrl);
FizzNacosServiceRegistration fizzNacosServiceRegistration = FizzNacosHelper.getServiceRegistration(fizzNacosProperties);
serviceRegistry = fizzNacosServiceRegistration.serviceRegistry;
registration = fizzNacosServiceRegistration.registration;
}
serviceRegistry.register(registration);
}
@PreDestroy
public void stop() {
serviceRegistry.deregister(registration);
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