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.springframework.cloud.client.serviceregistry.Registration;
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.Properties;
/**
* @author hongqiaowei
@@ -32,14 +38,45 @@ public abstract class FizzServiceRegistration {
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 Type type;
private Registration registration;
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.type = type;
this.registration = registration;
this.serviceRegistry = serviceRegistry;
}
@@ -48,6 +85,10 @@ public abstract class FizzServiceRegistration {
return id;
}
public Type getType() {
return type;
}
public void register() {
serviceRegistry.register(registration);
}
@@ -56,7 +97,7 @@ public abstract class FizzServiceRegistration {
serviceRegistry.deregister(registration);
}
public abstract RegistryCenter.Status getRegistryCenterStatus();
public abstract ServerStatus getServerStatus();
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.JsonProperty;
import we.Fizz;
import we.service_registry.eureka.FizzEurekaHelper;
import we.service_registry.nacos.FizzNacosHelper;
import we.util.JacksonUtils;
import we.util.PropertiesUtils;
import we.util.YmlUtils;
import java.util.Properties;
/**
* @author hongqiaowei
@@ -35,14 +29,6 @@ import java.util.Properties;
public class RegistryCenter {
public enum Status {
UP,
DOWN,
STARTING,
OUT_OF_SERVICE,
UNKNOWN;
}
public static final int EUREKA = 1;
public static final int NACOS = 2;
@@ -84,17 +70,12 @@ public class RegistryCenter {
@JsonIgnore
public FizzServiceRegistration getFizzServiceRegistration() {
if (fizzServiceRegistration == null) {
Properties properties;
if (this.clientConfigFormat == YML) {
properties = YmlUtils.string2properties(clientConfig);
} else {
properties = PropertiesUtils.from(clientConfig);
}
if (type == EUREKA) {
fizzServiceRegistration = FizzEurekaHelper.getServiceRegistration(Fizz.context, properties);
} else {
fizzServiceRegistration = FizzNacosHelper. getServiceRegistration(Fizz.context, properties);
}
fizzServiceRegistration = FizzServiceRegistration.getFizzServiceRegistration(
Fizz.context,
type == EUREKA ? FizzServiceRegistration.Type.EUREKA : FizzServiceRegistration.Type.NACOS,
clientConfigFormat == YML ? FizzServiceRegistration.ConfigFormat.YML : FizzServiceRegistration.ConfigFormat.PROPERTIES,
clientConfig
);
}
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.util.CollectionUtils;
import we.service_registry.FizzServiceRegistration;
import we.service_registry.RegistryCenter;
import we.util.Consts;
import we.util.Utils;
@@ -44,7 +43,7 @@ public class FizzEurekaServiceRegistration extends FizzServiceRegistration {
private final 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;
}
@@ -53,7 +52,7 @@ public class FizzEurekaServiceRegistration extends FizzServiceRegistration {
}
@Override
public RegistryCenter.Status getRegistryCenterStatus() {
public ServerStatus getServerStatus() {
EurekaClientConfig eurekaClientConfig = client.getEurekaClientConfig();
List<String> eurekaServerServiceUrls = eurekaClientConfig.getEurekaServerServiceUrls(EurekaClientConfigBean.DEFAULT_ZONE);
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);
}
private RegistryCenter.Status transfrom(InstanceInfo.InstanceStatus status) {
private ServerStatus transfrom(InstanceInfo.InstanceStatus status) {
if ( status == InstanceInfo.InstanceStatus.UP) {
return RegistryCenter.Status.UP;
return ServerStatus.UP;
} else if (status == InstanceInfo.InstanceStatus.DOWN) {
return RegistryCenter.Status.DOWN;
return ServerStatus.DOWN;
} 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) {
return RegistryCenter.Status.STARTING;
return ServerStatus.STARTING;
} 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 org.springframework.util.StringUtils;
import we.service_registry.FizzServiceRegistration;
import we.service_registry.RegistryCenter;
import we.util.Consts;
import we.util.Utils;
@@ -50,7 +49,7 @@ public class FizzNacosServiceRegistration extends FizzServiceRegistration {
private boolean userClusterName;
public FizzNacosServiceRegistration(String id, NacosRegistration registration, NacosServiceRegistry serviceRegistry, NamingService namingService) {
super(id, registration, serviceRegistry);
super(id, Type.NACOS, registration, serviceRegistry);
this.namingService = namingService;
NacosDiscoveryProperties discoveryProperties = registration.getNacosDiscoveryProperties();
groupName = discoveryProperties.getGroup();
@@ -69,21 +68,21 @@ public class FizzNacosServiceRegistration extends FizzServiceRegistration {
}
@Override
public RegistryCenter.Status getRegistryCenterStatus() {
public ServerStatus getServerStatus() {
String status = namingService.getServerStatus();
return transfrom(status);
}
private RegistryCenter.Status transfrom(String status) {
private ServerStatus transfrom(String status) {
if (status.equals("UP")) {
return RegistryCenter.Status.UP;
return ServerStatus.UP;
} else if (status.equals("DOWN")) {
return RegistryCenter.Status.DOWN;
return ServerStatus.DOWN;
} else {
log.warn("{} status is {}", getId(), status);
return RegistryCenter.Status.UNKNOWN;
return ServerStatus.UNKNOWN;
}
}