@Override public ServiceInfos loadMatchedServices(String serviceName, String versionName, boolean compatible) { final List<ServiceInfo> objects = new ArrayList<>(); objects.add(new ServiceInfo("127.0.0.1", SoaSystemEnvProperties.SOA_CONTAINER_PORT, "*")); return new ServiceInfos(false, objects); }
public ServiceInfos getServiceInfo(String serviceName, String versionName, boolean compatible) { List<ServiceInfo> serverList = caches.get(serviceName); List<ServiceInfo> usableList = new ArrayList<>(); if (serverList != null && serverList.size() > 0) { if (!compatible) { usableList.addAll(serverList.stream().filter(server -> server.getVersionName().equals(versionName)).collect(Collectors.toList())); } else { usableList.addAll(serverList.stream().filter(server -> Version.toVersion(server.getVersionName()).compatibleTo(Version.toVersion(versionName))).collect(Collectors.toList())); } } ServiceInfos serviceInfos = new ServiceInfos(true, usableList); return serviceInfos; }
@Override public ServiceInfos loadMatchedServices(String serviceName, String versionName, boolean compatible) { boolean usingFallbackZookeeper = false; List<ServiceInfo> serviceInfos = siw.getServiceInfo(serviceName, versionName, compatible); if (serviceInfos.size() <= 0 && SoaSystemEnvProperties.SOA_ZOOKEEPER_FALLBACK_ISCONFIG) { usingFallbackZookeeper = true; serviceInfos = zkfbw.getServiceInfo(serviceName, versionName, compatible); } //使用路由规则,过滤可用服务器 (local模式不考虑) final boolean isLocal = SoaSystemEnvProperties.SOA_REMOTING_MODE.equals("local"); if (!isLocal) { InvocationContext context = InvocationContext.Factory.getCurrentInstance(); List<Route> routes = usingFallbackZookeeper ? zkfbw.getRoutes() : siw.getRoutes(); List<ServiceInfo> tmpList = new ArrayList<>(); for (ServiceInfo sif : serviceInfos) { try { InetAddress inetAddress = InetAddress.getByName(sif.getHost()); if (RouteExecutor.isServerMatched(context, routes, inetAddress)) { tmpList.add(sif); } } catch (UnknownHostException e) { e.printStackTrace(); } } LOGGER.info("路由过滤前可用列表{}", serviceInfos.stream().map(s -> s.getHost()).collect(Collectors.toList())); serviceInfos = tmpList; LOGGER.info("路由过滤后可用列表{}", serviceInfos.stream().map(s -> s.getHost()).collect(Collectors.toList())); } return new ServiceInfos(usingFallbackZookeeper, serviceInfos); }
@Override public ServiceInfos loadMatchedServices(String serviceName, String versionName, boolean compatible) { boolean usingFallbackZookeeper = false; List<ServiceInfo> serviceInfos = siw.getServiceInfo(serviceName, versionName, compatible); if (serviceInfos.size() <= 0 && SoaSystemEnvProperties.SOA_ZOOKEEPER_FALLBACK_ISCONFIG) { usingFallbackZookeeper = true; serviceInfos = zkfbw.getServiceInfo(serviceName, versionName, compatible); } //使用路由规则,过滤可用服务器 (local模式不考虑) final boolean isLocal = SoaSystemEnvProperties.SOA_REMOTING_MODE.equals("local"); if (!isLocal) { InvocationContext context = InvocationContext.Factory.getCurrentInstance(); List<Route> routes = usingFallbackZookeeper ? zkfbw.getRoutes() : siw.getRoutes(); List<ServiceInfo> tmpList = new ArrayList<>(); for (ServiceInfo sif : serviceInfos) { try { InetAddress inetAddress = InetAddress.getByName(sif.getHost()); if (RouteExecutor.isServerMatched(context, routes, inetAddress)) { tmpList.add(sif); } } catch (UnknownHostException e) { e.printStackTrace(); } } //LOGGER.debug("路由过滤前可用列表{}", serviceInfos.stream().map(s -> s.getHost()).collect(Collectors.toList())); serviceInfos = tmpList; //LOGGER.debug("路由过滤后可用列表{}", serviceInfos.stream().map(s -> s.getHost()).collect(Collectors.toList())); } return new ServiceInfos(usingFallbackZookeeper, serviceInfos); }
public static String getCallerInfo(String serviceName, String versionName, String methodName) { final boolean isLocal = SoaSystemEnvProperties.SOA_REMOTING_MODE.equals("local"); String callerInfo = null; List<ServiceInfo> usableList; ServiceInfos serviceInfos; if (isLocal) { usableList = new ArrayList<>(); serviceInfos = new ServiceInfos(false, usableList); } else { serviceInfos = RegistryAgentProxy.getCurrentInstance(RegistryAgentProxy.Type.Client).loadMatchedServices(serviceName, versionName, true); usableList = serviceInfos.getServiceInfoList(); } String serviceKey = serviceName + "." + versionName + "." + methodName + ".consumer"; LoadBalanceStratage balance = getLoadBalanceStratage(serviceInfos.isUsingFallbackZk(), serviceKey) == null ? LoadBalanceStratage.LeastActive : getLoadBalanceStratage(serviceInfos.isUsingFallbackZk(), serviceKey); switch (balance) { case Random: callerInfo = random(callerInfo, usableList, null); break; case RoundRobin: callerInfo = roundRobin(callerInfo, usableList, null); break; case LeastActive: callerInfo = leastActive(callerInfo, usableList, null); break; case ConsistentHash: break; } return callerInfo; }
public static String getCallerInfo(String serviceName, String versionName, String methodName) { final boolean isLocal = SoaSystemEnvProperties.SOA_REMOTING_MODE.equals("local"); String callerInfo = null; List<ServiceInfo> usableList; ServiceInfos serviceInfos; if (isLocal) { usableList = new ArrayList<>(); serviceInfos = new ServiceInfos(false, usableList); } else { serviceInfos = RegistryAgentProxy.getCurrentInstance(RegistryAgentProxy.Type.Client).loadMatchedServices(serviceName, versionName, true); usableList = serviceInfos.getServiceInfoList(); } String serviceKey = serviceName + "." + versionName + "." + methodName + ".consumer"; LoadBalanceStratage balance = getLoadBalanceStratage(serviceInfos.isUsingFallbackZk(), serviceKey) == null ? LoadBalanceStratage.LeastActive : getLoadBalanceStratage(serviceInfos.isUsingFallbackZk(), serviceKey); switch (balance) { case Random: callerInfo = random(callerInfo, usableList, null); break; case RoundRobin: callerInfo = roundRobin(callerInfo, usableList, null); break; case LeastActive: callerInfo = leastActive(callerInfo, usableList, null); break; case ConsistentHash: break; } return callerInfo; }
serviceInfos = new ServiceInfos(false, usableList); } else { serviceInfos = RegistryAgentProxy.getCurrentInstance(RegistryAgentProxy.Type.Client).loadMatchedServices(soaHeader.getServiceName(), soaHeader.getVersionName(), true);
serviceInfos = new ServiceInfos(false, usableList); } else { serviceInfos = RegistryAgentProxy.getCurrentInstance(RegistryAgentProxy.Type.Client).loadMatchedServices(soaHeader.getServiceName(), soaHeader.getVersionName(), true);