Optimize FizzServiceRegistration.java

This commit is contained in:
hongqiaowei
2021-12-26 14:40:51 +08:00
parent 31d58fadd5
commit 1b3627d6cd
4 changed files with 63 additions and 43 deletions

View File

@@ -21,8 +21,14 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
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.ApplicationContext;
import we.service_registry.eureka.FizzEurekaHelper;
import we.service_registry.nacos.FizzNacosHelper;
import we.util.PropertiesUtils;
import we.util.YmlUtils;
import java.util.List; import java.util.List;
import java.util.Properties;
/** /**
* @author hongqiaowei * @author hongqiaowei
@@ -32,14 +38,45 @@ public abstract class FizzServiceRegistration {
protected static final Logger log = LoggerFactory.getLogger(FizzServiceRegistration.class); protected static final Logger log = LoggerFactory.getLogger(FizzServiceRegistration.class);
public enum Type {
EUREKA, NACOS;
}
public enum ConfigFormat {
YML, PROPERTIES;
}
public enum ServerStatus {
UP, DOWN, STARTING, OUT_OF_SERVICE, UNKNOWN;
}
private String id; private String id;
private Type type;
private Registration registration; private Registration registration;
private ServiceRegistry serviceRegistry; private ServiceRegistry serviceRegistry;
public FizzServiceRegistration(String id, Registration registration, ServiceRegistry serviceRegistry) { public static FizzServiceRegistration getFizzServiceRegistration(ApplicationContext applicationContext, Type type, ConfigFormat configFormat, String config) {
Properties configProperties;
if (configFormat == ConfigFormat.YML) {
configProperties = YmlUtils.string2properties(config);
} else {
configProperties = PropertiesUtils.from(config);
}
FizzServiceRegistration fizzServiceRegistration;
if (type == Type.EUREKA) {
fizzServiceRegistration = FizzEurekaHelper.getServiceRegistration(applicationContext, configProperties);
} else {
fizzServiceRegistration = FizzNacosHelper. getServiceRegistration(applicationContext, configProperties);
}
return fizzServiceRegistration;
}
public FizzServiceRegistration(String id, Type type, Registration registration, ServiceRegistry serviceRegistry) {
this.id = id; this.id = id;
this.type = type;
this.registration = registration; this.registration = registration;
this.serviceRegistry = serviceRegistry; this.serviceRegistry = serviceRegistry;
} }
@@ -48,6 +85,10 @@ public abstract class FizzServiceRegistration {
return id; return id;
} }
public Type getType() {
return type;
}
public void register() { public void register() {
serviceRegistry.register(registration); serviceRegistry.register(registration);
} }
@@ -56,7 +97,7 @@ public abstract class FizzServiceRegistration {
serviceRegistry.deregister(registration); serviceRegistry.deregister(registration);
} }
public abstract RegistryCenter.Status getRegistryCenterStatus(); public abstract ServerStatus getServerStatus();
public abstract List<String> getServices(); public abstract List<String> getServices();

View File

@@ -21,13 +21,7 @@ import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import we.Fizz; import we.Fizz;
import we.service_registry.eureka.FizzEurekaHelper;
import we.service_registry.nacos.FizzNacosHelper;
import we.util.JacksonUtils; import we.util.JacksonUtils;
import we.util.PropertiesUtils;
import we.util.YmlUtils;
import java.util.Properties;
/** /**
* @author hongqiaowei * @author hongqiaowei
@@ -35,14 +29,6 @@ import java.util.Properties;
public class RegistryCenter { public class RegistryCenter {
public enum Status {
UP,
DOWN,
STARTING,
OUT_OF_SERVICE,
UNKNOWN;
}
public static final int EUREKA = 1; public static final int EUREKA = 1;
public static final int NACOS = 2; public static final int NACOS = 2;
@@ -84,17 +70,12 @@ public class RegistryCenter {
@JsonIgnore @JsonIgnore
public FizzServiceRegistration getFizzServiceRegistration() { public FizzServiceRegistration getFizzServiceRegistration() {
if (fizzServiceRegistration == null) { if (fizzServiceRegistration == null) {
Properties properties; fizzServiceRegistration = FizzServiceRegistration.getFizzServiceRegistration(
if (this.clientConfigFormat == YML) { Fizz.context,
properties = YmlUtils.string2properties(clientConfig); type == EUREKA ? FizzServiceRegistration.Type.EUREKA : FizzServiceRegistration.Type.NACOS,
} else { clientConfigFormat == YML ? FizzServiceRegistration.ConfigFormat.YML : FizzServiceRegistration.ConfigFormat.PROPERTIES,
properties = PropertiesUtils.from(clientConfig); clientConfig
} );
if (type == EUREKA) {
fizzServiceRegistration = FizzEurekaHelper.getServiceRegistration(Fizz.context, properties);
} else {
fizzServiceRegistration = FizzNacosHelper. getServiceRegistration(Fizz.context, properties);
}
} }
return fizzServiceRegistration; return fizzServiceRegistration;
} }

View File

@@ -29,7 +29,6 @@ import org.springframework.cloud.netflix.eureka.serviceregistry.EurekaRegistrati
import org.springframework.cloud.netflix.eureka.serviceregistry.EurekaServiceRegistry; import org.springframework.cloud.netflix.eureka.serviceregistry.EurekaServiceRegistry;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import we.service_registry.FizzServiceRegistration; import we.service_registry.FizzServiceRegistration;
import we.service_registry.RegistryCenter;
import we.util.Consts; import we.util.Consts;
import we.util.Utils; import we.util.Utils;
@@ -44,7 +43,7 @@ public class FizzEurekaServiceRegistration extends FizzServiceRegistration {
private final CloudEurekaClient client; private final CloudEurekaClient client;
public FizzEurekaServiceRegistration(String id, EurekaRegistration registration, EurekaServiceRegistry serviceRegistry, CloudEurekaClient client) { public FizzEurekaServiceRegistration(String id, EurekaRegistration registration, EurekaServiceRegistry serviceRegistry, CloudEurekaClient client) {
super(id, registration, serviceRegistry); super(id, Type.EUREKA, registration, serviceRegistry);
this.client = client; this.client = client;
} }
@@ -53,7 +52,7 @@ public class FizzEurekaServiceRegistration extends FizzServiceRegistration {
} }
@Override @Override
public RegistryCenter.Status getRegistryCenterStatus() { public ServerStatus getServerStatus() {
EurekaClientConfig eurekaClientConfig = client.getEurekaClientConfig(); EurekaClientConfig eurekaClientConfig = client.getEurekaClientConfig();
List<String> eurekaServerServiceUrls = eurekaClientConfig.getEurekaServerServiceUrls(EurekaClientConfigBean.DEFAULT_ZONE); List<String> eurekaServerServiceUrls = eurekaClientConfig.getEurekaServerServiceUrls(EurekaClientConfigBean.DEFAULT_ZONE);
Map<String, Integer> registryCenterVip2port = new HashMap<>(); Map<String, Integer> registryCenterVip2port = new HashMap<>();
@@ -107,21 +106,21 @@ public class FizzEurekaServiceRegistration extends FizzServiceRegistration {
throw Utils.runtimeExceptionWithoutStack("can't find any server with " + join); throw Utils.runtimeExceptionWithoutStack("can't find any server with " + join);
} }
private RegistryCenter.Status transfrom(InstanceInfo.InstanceStatus status) { private ServerStatus transfrom(InstanceInfo.InstanceStatus status) {
if ( status == InstanceInfo.InstanceStatus.UP) { if ( status == InstanceInfo.InstanceStatus.UP) {
return RegistryCenter.Status.UP; return ServerStatus.UP;
} else if (status == InstanceInfo.InstanceStatus.DOWN) { } else if (status == InstanceInfo.InstanceStatus.DOWN) {
return RegistryCenter.Status.DOWN; return ServerStatus.DOWN;
} else if (status == InstanceInfo.InstanceStatus.OUT_OF_SERVICE) { } else if (status == InstanceInfo.InstanceStatus.OUT_OF_SERVICE) {
return RegistryCenter.Status.OUT_OF_SERVICE; return ServerStatus.OUT_OF_SERVICE;
} else if (status == InstanceInfo.InstanceStatus.STARTING) { } else if (status == InstanceInfo.InstanceStatus.STARTING) {
return RegistryCenter.Status.STARTING; return ServerStatus.STARTING;
} else { } else {
return RegistryCenter.Status.UNKNOWN; return ServerStatus.UNKNOWN;
} }
} }

View File

@@ -26,7 +26,6 @@ import com.alibaba.nacos.api.naming.pojo.Instance;
import com.alibaba.nacos.api.naming.pojo.ListView; import com.alibaba.nacos.api.naming.pojo.ListView;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import we.service_registry.FizzServiceRegistration; import we.service_registry.FizzServiceRegistration;
import we.service_registry.RegistryCenter;
import we.util.Consts; import we.util.Consts;
import we.util.Utils; import we.util.Utils;
@@ -50,7 +49,7 @@ public class FizzNacosServiceRegistration extends FizzServiceRegistration {
private boolean userClusterName; private boolean userClusterName;
public FizzNacosServiceRegistration(String id, NacosRegistration registration, NacosServiceRegistry serviceRegistry, NamingService namingService) { public FizzNacosServiceRegistration(String id, NacosRegistration registration, NacosServiceRegistry serviceRegistry, NamingService namingService) {
super(id, registration, serviceRegistry); super(id, Type.NACOS, registration, serviceRegistry);
this.namingService = namingService; this.namingService = namingService;
NacosDiscoveryProperties discoveryProperties = registration.getNacosDiscoveryProperties(); NacosDiscoveryProperties discoveryProperties = registration.getNacosDiscoveryProperties();
groupName = discoveryProperties.getGroup(); groupName = discoveryProperties.getGroup();
@@ -69,21 +68,21 @@ public class FizzNacosServiceRegistration extends FizzServiceRegistration {
} }
@Override @Override
public RegistryCenter.Status getRegistryCenterStatus() { public ServerStatus getServerStatus() {
String status = namingService.getServerStatus(); String status = namingService.getServerStatus();
return transfrom(status); return transfrom(status);
} }
private RegistryCenter.Status transfrom(String status) { private ServerStatus transfrom(String status) {
if (status.equals("UP")) { if (status.equals("UP")) {
return RegistryCenter.Status.UP; return ServerStatus.UP;
} else if (status.equals("DOWN")) { } else if (status.equals("DOWN")) {
return RegistryCenter.Status.DOWN; return ServerStatus.DOWN;
} else { } else {
log.warn("{} status is {}", getId(), status); log.warn("{} status is {}", getId(), status);
return RegistryCenter.Status.UNKNOWN; return ServerStatus.UNKNOWN;
} }
} }