style fix

pull/3686/head
karsonto 10 months ago
parent bbff4b1afd
commit 0a1726f0c9

@ -22,8 +22,6 @@ import java.util.Map;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.springframework.cloud.client.ServiceInstance;
import com.alibaba.cloud.commons.lang.StringUtils; import com.alibaba.cloud.commons.lang.StringUtils;
import com.alibaba.cloud.nacos.NacosServiceInstance; import com.alibaba.cloud.nacos.NacosServiceInstance;
import com.alibaba.cloud.nacos.loadbalancer.NacosLoadBalancer; import com.alibaba.cloud.nacos.loadbalancer.NacosLoadBalancer;
@ -31,59 +29,62 @@ import com.alibaba.cloud.nacos.util.NacosServiceInstanceConverter;
import com.alibaba.nacos.api.naming.pojo.Instance; import com.alibaba.nacos.api.naming.pojo.Instance;
import com.alibaba.nacos.client.naming.core.Balancer; import com.alibaba.nacos.client.naming.core.Balancer;
import org.springframework.cloud.client.ServiceInstance;
/** /**
* @author itmuch.com XuDaojie * @author itmuch.com XuDaojie
* @since 2021.1 * @since 2021.1
*/ */
public class NacosBalancer extends Balancer { public class NacosBalancer extends Balancer {
private static final String IPV4_REGEX = "((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})(.((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})){3}"; private static final String IPV4_REGEX = "((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})(.((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})){3}";
private static final String IPV6_KEY = "IPv6"; private static final String IPV6_KEY = "IPv6";
/** /**
* Choose instance by weight. * Choose instance by weight.
* @param instances Instance List *
* @return the chosen instance * @param instances Instance List
*/ * @return the chosen instance
public static Instance getHostByRandomWeight2(List<Instance> instances) { */
return getHostByRandomWeight(instances); public static Instance getHostByRandomWeight2(List<Instance> instances) {
} return getHostByRandomWeight(instances);
}
/** /**
* Spring Cloud LoadBalancer Choose instance by weight. * Spring Cloud LoadBalancer Choose instance by weight.
* @param serviceInstances Instance List *
* @return the chosen instance * @param serviceInstances Instance List
*/ * @return the chosen instance
public static ServiceInstance getHostByRandomWeight3( */
List<ServiceInstance> serviceInstances) { public static ServiceInstance getHostByRandomWeight3(List<ServiceInstance> serviceInstances) {
Map<Instance, ServiceInstance> instanceMap = new HashMap<>(); Map<Instance, ServiceInstance> instanceMap = new HashMap<>();
List<Instance> nacosInstance = serviceInstances.stream().map(serviceInstance -> { List<Instance> nacosInstance = serviceInstances.stream().map(serviceInstance -> {
Instance instance = NacosServiceInstanceConverter.fromServiceInstance(serviceInstance); Instance instance = NacosServiceInstanceConverter.fromServiceInstance(serviceInstance);
instanceMap.put(instance, serviceInstance); instanceMap.put(instance, serviceInstance);
return instance; return instance;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
Instance instance = getHostByRandomWeight2(nacosInstance); Instance instance = getHostByRandomWeight2(nacosInstance);
NacosServiceInstance nacosServiceInstance = (NacosServiceInstance) instanceMap.get(instance); NacosServiceInstance nacosServiceInstance = (NacosServiceInstance) instanceMap.get(instance);
// When local support IPv6 address stack, referred to use IPv6 address. // When local support IPv6 address stack, referred to use IPv6 address.
if (StringUtils.isNotEmpty(NacosLoadBalancer.ipv6)) { if (StringUtils.isNotEmpty(NacosLoadBalancer.ipv6)) {
convertIPv4ToIPv6(nacosServiceInstance); convertIPv4ToIPv6(nacosServiceInstance);
}
return nacosServiceInstance;
} }
return nacosServiceInstance;
}
/** /**
* There is two type Ip,using IPv6 should use IPv6 in metadata to replace IPv4 in IP * There is two type Ip,using IPv6 should use IPv6 in metadata to replace IPv4 in IP field.
* field. */
*/ private static void convertIPv4ToIPv6(NacosServiceInstance instance) {
private static void convertIPv4ToIPv6(NacosServiceInstance instance) { if (Pattern.matches(IPV4_REGEX, instance.getHost())) {
if (Pattern.matches(IPV4_REGEX, instance.getHost())) { String ip = instance.getMetadata().get(IPV6_KEY);
String ip = instance.getMetadata().get(IPV6_KEY); if (StringUtils.isNotEmpty(ip)) {
if (StringUtils.isNotEmpty(ip)) { instance.setHost(ip);
instance.setHost(ip); }
} }
} }
}
} }

@ -19,8 +19,6 @@ package com.alibaba.cloud.nacos.discovery;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.springframework.cloud.client.ServiceInstance;
import com.alibaba.cloud.nacos.NacosDiscoveryProperties; import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
import com.alibaba.cloud.nacos.NacosServiceManager; import com.alibaba.cloud.nacos.NacosServiceManager;
import com.alibaba.cloud.nacos.util.NacosServiceInstanceConverter; import com.alibaba.cloud.nacos.util.NacosServiceInstanceConverter;
@ -29,63 +27,60 @@ import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.pojo.Instance; 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.cloud.client.ServiceInstance;
/** /**
* @author <a href="mailto:echooy.mxq@gmail.com">echooymxq</a> * @author <a href="mailto:echooy.mxq@gmail.com">echooymxq</a>
* @author changjin wei() * @author changjin wei()
**/ **/
public class NacosServiceDiscovery { public class NacosServiceDiscovery {
private NacosDiscoveryProperties discoveryProperties; private NacosDiscoveryProperties discoveryProperties;
private NacosServiceManager nacosServiceManager; private NacosServiceManager nacosServiceManager;
public NacosServiceDiscovery(NacosDiscoveryProperties discoveryProperties, public NacosServiceDiscovery(NacosDiscoveryProperties discoveryProperties, NacosServiceManager nacosServiceManager) {
NacosServiceManager nacosServiceManager) { this.discoveryProperties = discoveryProperties;
this.discoveryProperties = discoveryProperties; this.nacosServiceManager = nacosServiceManager;
this.nacosServiceManager = nacosServiceManager; }
}
/** /**
* Return all instances for the given service. * Return all instances for the given service.
* *
* @param serviceId id of service * @param serviceId id of service
* @return list of instances * @return list of instances
* @throws NacosException nacosException * @throws NacosException nacosException
*/ */
public List<ServiceInstance> getInstances(String serviceId) throws NacosException { public List<ServiceInstance> getInstances(String serviceId) throws NacosException {
String group = discoveryProperties.getGroup(); String group = discoveryProperties.getGroup();
List<Instance> instances = namingService().selectInstances(serviceId, group, List<Instance> instances = namingService().selectInstances(serviceId, group, true);
true); return hostToServiceInstanceList(instances, serviceId);
return hostToServiceInstanceList(instances, serviceId); }
}
/** /**
* Return the names of all services. * Return the names of all services.
* *
* @return list of service names * @return list of service names
* @throws NacosException nacosException * @throws NacosException nacosException
*/ */
public List<String> getServices() throws NacosException { public List<String> getServices() throws NacosException {
String group = discoveryProperties.getGroup(); String group = discoveryProperties.getGroup();
ListView<String> services = namingService().getServicesOfServer(1, ListView<String> services = namingService().getServicesOfServer(1, Integer.MAX_VALUE, group);
Integer.MAX_VALUE, group); return services.getData();
return services.getData(); }
}
public static List<ServiceInstance> hostToServiceInstanceList( public static List<ServiceInstance> hostToServiceInstanceList(List<Instance> instances, String serviceId) {
List<Instance> instances, String serviceId) { List<ServiceInstance> result = new ArrayList<>(instances.size());
List<ServiceInstance> result = new ArrayList<>(instances.size()); for (Instance instance : instances) {
for (Instance instance : instances) { ServiceInstance serviceInstance = NacosServiceInstanceConverter.fromInstanceAndServiceId(instance, serviceId);
ServiceInstance serviceInstance = NacosServiceInstanceConverter.fromInstanceAndServiceId(instance, serviceId); if (serviceInstance != null) {
if (serviceInstance != null) { result.add(serviceInstance);
result.add(serviceInstance); }
} }
} return result;
return result; }
}
private NamingService namingService() { private NamingService namingService() {
return nacosServiceManager.getNamingService(); return nacosServiceManager.getNamingService();
} }
} }

@ -19,116 +19,118 @@ package com.alibaba.cloud.nacos.util;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import org.springframework.cloud.client.ServiceInstance;
import com.alibaba.cloud.nacos.NacosServiceInstance; import com.alibaba.cloud.nacos.NacosServiceInstance;
import com.alibaba.nacos.api.naming.pojo.Instance; import com.alibaba.nacos.api.naming.pojo.Instance;
import org.springframework.cloud.client.ServiceInstance;
/** /**
* @author Karson * @author Karson
*/ */
public class NacosServiceInstanceConverter { final public class NacosServiceInstanceConverter {
public static final String WEIGHT = "nacos.weight"; private static final String WEIGHT = "nacos.weight";
public static final String HEALTHY = "nacos.healthy"; private static final String HEALTHY = "nacos.healthy";
public static ServiceInstance fromInstanceAndServiceId(Instance instance, String serviceId) { private NacosServiceInstanceConverter() { }
return ServiceInstanceBuilder.fromInstanceAndServiceId(instance, serviceId).build();
} public static ServiceInstance fromInstanceAndServiceId(Instance instance, String serviceId) {
return ServiceInstanceBuilder.fromInstanceAndServiceId(instance, serviceId).build();
public static Instance fromServiceInstance(ServiceInstance instance) { }
return InstanceServiceBuilder.fromServiceInstance(instance).build();
} public static Instance fromServiceInstance(ServiceInstance instance) {
return InstanceServiceBuilder.fromServiceInstance(instance).build();
interface Builder<T> { }
T build(); interface Builder<T> {
}
T build();
static class InstanceServiceBuilder implements Builder<Instance> { }
private ServiceInstance serviceInstance; final static class InstanceServiceBuilder implements Builder<Instance> {
private InstanceServiceBuilder() { private ServiceInstance serviceInstance;
} private InstanceServiceBuilder() {
private void setServiceInstance(ServiceInstance serviceInstance) { }
this.serviceInstance = serviceInstance;
} private void setServiceInstance(ServiceInstance serviceInstance) {
this.serviceInstance = serviceInstance;
private static InstanceServiceBuilder fromServiceInstance(ServiceInstance instance) { }
InstanceServiceBuilder instanceServiceBuilder = new InstanceServiceBuilder();
instanceServiceBuilder.setServiceInstance(instance); private static InstanceServiceBuilder fromServiceInstance(ServiceInstance instance) {
return instanceServiceBuilder; InstanceServiceBuilder instanceServiceBuilder = new InstanceServiceBuilder();
} instanceServiceBuilder.setServiceInstance(instance);
return instanceServiceBuilder;
@Override }
public Instance build() {
Instance instance = new Instance(); @Override
Map<String, String> metadata = serviceInstance.getMetadata(); public Instance build() {
instance.setIp(serviceInstance.getHost()); Instance instance = new Instance();
instance.setPort(serviceInstance.getPort()); Map<String, String> metadata = serviceInstance.getMetadata();
instance.setWeight(Double.parseDouble(metadata.get(WEIGHT))); instance.setIp(serviceInstance.getHost());
instance.setHealthy(Boolean.parseBoolean(metadata.get(HEALTHY))); instance.setPort(serviceInstance.getPort());
return instance; instance.setWeight(Double.parseDouble(metadata.get(WEIGHT)));
} instance.setHealthy(Boolean.parseBoolean(metadata.get(HEALTHY)));
} return instance;
}
}
static class ServiceInstanceBuilder implements Builder<ServiceInstance> {
final static class ServiceInstanceBuilder implements Builder<ServiceInstance> {
private Instance instance;
private String serviceId; private Instance instance;
private String serviceId;
private ServiceInstanceBuilder() {
} private ServiceInstanceBuilder() {
}
private static ServiceInstanceBuilder fromInstanceAndServiceId(Instance instance, String serviceId) {
ServiceInstanceBuilder nacosServiceInstanceBuilder = new ServiceInstanceBuilder(); private static ServiceInstanceBuilder fromInstanceAndServiceId(Instance instance, String serviceId) {
nacosServiceInstanceBuilder.setInstance(instance); ServiceInstanceBuilder nacosServiceInstanceBuilder = new ServiceInstanceBuilder();
nacosServiceInstanceBuilder.setServiceId(serviceId); nacosServiceInstanceBuilder.setInstance(instance);
return nacosServiceInstanceBuilder; nacosServiceInstanceBuilder.setServiceId(serviceId);
} return nacosServiceInstanceBuilder;
}
private void setInstance(Instance instance) { private void setInstance(Instance instance) {
this.instance = instance; this.instance = instance;
} }
private void setServiceId(String serviceId) { private void setServiceId(String serviceId) {
this.serviceId = serviceId; this.serviceId = serviceId;
} }
@Override @Override
public ServiceInstance build() { public ServiceInstance build() {
if (this.instance == null || !this.instance.isEnabled() || !this.instance.isHealthy()) { if (this.instance == null || !this.instance.isEnabled() || !this.instance.isHealthy()) {
return null; return null;
} }
NacosServiceInstance nacosServiceInstance = new NacosServiceInstance(); NacosServiceInstance nacosServiceInstance = new NacosServiceInstance();
nacosServiceInstance.setHost(instance.getIp()); nacosServiceInstance.setHost(instance.getIp());
nacosServiceInstance.setPort(instance.getPort()); nacosServiceInstance.setPort(instance.getPort());
nacosServiceInstance.setServiceId(serviceId); nacosServiceInstance.setServiceId(serviceId);
nacosServiceInstance.setInstanceId(instance.getInstanceId()); nacosServiceInstance.setInstanceId(instance.getInstanceId());
Map<String, String> metadata = new HashMap<>(); Map<String, String> metadata = new HashMap<>();
metadata.put("nacos.instanceId", instance.getInstanceId()); metadata.put("nacos.instanceId", instance.getInstanceId());
metadata.put(WEIGHT, instance.getWeight() + ""); metadata.put(WEIGHT, instance.getWeight() + "");
metadata.put(HEALTHY, instance.isHealthy() + ""); metadata.put(HEALTHY, instance.isHealthy() + "");
metadata.put("nacos.cluster", instance.getClusterName() + ""); metadata.put("nacos.cluster", instance.getClusterName() + "");
if (instance.getMetadata() != null) { if (instance.getMetadata() != null) {
metadata.putAll(instance.getMetadata()); metadata.putAll(instance.getMetadata());
} }
metadata.put("nacos.ephemeral", String.valueOf(instance.isEphemeral())); metadata.put("nacos.ephemeral", String.valueOf(instance.isEphemeral()));
nacosServiceInstance.setMetadata(metadata); nacosServiceInstance.setMetadata(metadata);
if (metadata.containsKey("secure")) { if (metadata.containsKey("secure")) {
boolean secure = Boolean.parseBoolean(metadata.get("secure")); boolean secure = Boolean.parseBoolean(metadata.get("secure"));
nacosServiceInstance.setSecure(secure); nacosServiceInstance.setSecure(secure);
} }
return nacosServiceInstance; return nacosServiceInstance;
} }
} }
} }

Loading…
Cancel
Save