@Override public List<Server> getInitialListOfServers() { DiscoveryContext context = new DiscoveryContext(); context.setInputParameters(serviceId); VersionedCache serversVersionedCache = discoveryTree.discovery(context, RegistryUtils.getAppId(), serviceId, DefinitionConst.VERSION_RULE_ALL); return serversVersionedCache.data(); }
@Override protected String findTransportName(DiscoveryContext context, DiscoveryTreeNode parent) { Invocation invocation = context.getInputParameters(); return invocation.getConfigTransportName(); }
@Override protected String findChildName(DiscoveryContext context, DiscoveryTreeNode parent) { String key = context.getContextParameter(KEY_ZONE_AWARE_STEP); if (key == null) { key = GROUP_RegionAndAZMatch; context.pushRerunFilter(); } else if (GROUP_RegionAndAZMatch.equals(key)) { key = GROUP_instancesAZMatch; context.pushRerunFilter(); } else if (GROUP_instancesAZMatch.equals(key)) { key = GROUP_instancesNoMatch; } else { throw new ServiceCombException("not possible happen, maybe a bug."); } context.putContextParameter(KEY_ZONE_AWARE_STEP, key); return key; }
protected DiscoveryTreeNode doDiscovery(DiscoveryContext context, DiscoveryTreeNode parent) { for (int idx = 0; idx < filters.size(); ) { DiscoveryFilter filter = filters.get(idx); context.setCurrentNode(parent); DiscoveryTreeNode rerunNode = context.popRerunFilter(); if (rerunNode != null) { parent = rerunNode;
protected DiscoveryTreeNode doDiscovery(DiscoveryContext context, DiscoveryTreeNode parent) { for (int idx = 0; idx < filters.size(); ) { DiscoveryFilter filter = filters.get(idx); context.setCurrentNode(parent); DiscoveryTreeNode rerunNode = context.popRerunFilter(); if (rerunNode != null) { parent = rerunNode;
@Override public List<Server> getInitialListOfServers() { DiscoveryContext context = new DiscoveryContext(); context.setInputParameters(serviceId); VersionedCache serversVersionedCache = discoveryTree.discovery(context, RegistryUtils.getAppId(), serviceId, DefinitionConst.VERSION_RULE_ALL); return serversVersionedCache.data(); }
@Override protected String findChildName(DiscoveryContext context, DiscoveryTreeNode parent) { Invocation invocation = context.getInputParameters(); return invocation.getMicroserviceQualifiedName(); }
@Override protected String findChildName(DiscoveryContext context, DiscoveryTreeNode parent) { String key = context.getContextParameter(KEY_ZONE_AWARE_STEP); if (key == null) { key = GROUP_RegionAndAZMatch; context.pushRerunFilter(); } else if (GROUP_RegionAndAZMatch.equals(key)) { key = GROUP_instancesAZMatch; context.pushRerunFilter(); } else if (GROUP_instancesAZMatch.equals(key)) { key = GROUP_instancesNoMatch; } else { throw new ServiceCombException("not possible happen, maybe a bug."); } context.putContextParameter(KEY_ZONE_AWARE_STEP, key); return key; }
public <T> List<T> doGetInstances(final String serviceId) { DiscoveryContext context = new DiscoveryContext(); context.setInputParameters(serviceId); DiscoveryTree discoveryTree = discoveryTrees.computeIfAbsent(serviceId, key -> { DiscoveryTree tree = new DiscoveryTree(); tree.addFilter(filter); return tree; }); VersionedCache serversVersionedCache = discoveryTree.discovery(context, RegistryUtils.getAppId(), serviceId, DefinitionConst.VERSION_RULE_ALL); return serversVersionedCache.data(); }
@Override public DiscoveryTreeNode discovery(DiscoveryContext context, DiscoveryTreeNode parent) { return parent.children() .computeIfAbsent(context.getInputParameters(), etn -> createDiscoveryTreeNode(context, parent)); }
protected LoadBalancer getOrCreateLoadBalancer(Invocation invocation) { DiscoveryContext context = new DiscoveryContext(); context.setInputParameters(invocation); VersionedCache serversVersionedCache = discoveryTree.discovery(context, invocation.getAppId(), invocation.getMicroserviceName(), invocation.getMicroserviceVersionRule()); invocation.addLocalContext(CONTEXT_KEY_SERVER_LIST, serversVersionedCache.data()); return loadBalancerMap .computeIfAbsent(serversVersionedCache.name(), name -> { return createLoadBalancer(invocation.getMicroserviceName()); }); }
@SuppressWarnings("unchecked") protected DiscoveryTreeNode createDiscoveryTreeNode(DiscoveryContext context, DiscoveryTreeNode parent) { String serviceName = context.getInputParameters(); List<Object> instances = new ArrayList<>(); for (MicroserviceInstance instance : ((Map<String, MicroserviceInstance>) parent.data()).values()) { for (String endpoint : instance.getEndpoints()) { String scheme = endpoint.split(":", 2)[0]; if (!scheme.equalsIgnoreCase("rest")) { LOGGER.info("Endpoint {} is not supported in Spring Cloud, ignoring.", endpoint); continue; } URIEndpointObject uri = new URIEndpointObject(endpoint); instances.add(instanceFactory.createInstance(serviceName, uri)); } } return new DiscoveryTreeNode() .subName(parent, serviceName) .data(instances); } };
@Override public void handle(Invocation invocation, AsyncResponse asyncResp) throws Exception { DiscoveryContext context = new DiscoveryContext(); context.setInputParameters(invocation); VersionedCache endpointsVersionedCache = discoveryTree.discovery(context, invocation.getAppId(),
@Override protected void init(DiscoveryContext context, DiscoveryTreeNode parent) { Map<String, MicroserviceInstance> matchedInstance = new HashMap<>(); Invocation invocation = context.getInputParameters(); Map<String, MicroserviceInstance> instances = parent.data(); Map<String, String> filterOptions = Configuration.INSTANCE.getFlowsplitFilterOptions(invocation.getMicroserviceName()); for (String id : instances.keySet()) { MicroserviceInstance target = instances.get(id); if (allowVisit(target, filterOptions)) { matchedInstance.put(id, target); } } parent.child(MATCHED, new DiscoveryTreeNode() .subName(parent, MATCHED) .data(matchedInstance)); }
@Override public List<Server> getInitialListOfServers() { DiscoveryContext context = new DiscoveryContext(); context.setInputParameters(serviceId); VersionedCache serversVersionedCache = discoveryTree.discovery(context, RegistryUtils.getAppId(), serviceId, DefinitionConst.VERSION_RULE_ALL); return serversVersionedCache.data(); }
@Override public void init(DiscoveryContext context, DiscoveryTreeNode parent) { Map<MicroserviceVersionMeta, Map<String, MicroserviceInstance>> versionMap = groupByVersion(context.getInputParameters(), parent.data()); Map<String, DiscoveryTreeNode> operationNodes = initOperationNodes(parent, versionMap); fillInstances(operationNodes, versionMap); parent.children(operationNodes); }
public <T> List<T> doGetInstances(final String serviceId) { DiscoveryContext context = new DiscoveryContext(); context.setInputParameters(serviceId); DiscoveryTree discoveryTree = discoveryTrees.computeIfAbsent(serviceId, key -> { DiscoveryTree tree = new DiscoveryTree(); tree.addFilter(filter); return tree; }); VersionedCache serversVersionedCache = discoveryTree.discovery(context, RegistryUtils.getAppId(), serviceId, DefinitionConst.VERSION_RULE_ALL); return serversVersionedCache.data(); }
@Override public DiscoveryTreeNode discovery(DiscoveryContext context, DiscoveryTreeNode parent) { Map<String, MicroserviceInstance> instances = parent.data(); Invocation invocation = context.getInputParameters(); if (!Configuration.INSTANCE.isIsolationFilterOpen(invocation.getMicroserviceName())) { return parent; } Map<String, MicroserviceInstance> filteredServers = new HashMap<>(); for (String key : instances.keySet()) { MicroserviceInstance instance = instances.get(key); if (allowVisit(invocation, instance)) { filteredServers.put(key, instance); } } DiscoveryTreeNode child = new DiscoveryTreeNode(); if (filteredServers.isEmpty() && DynamicPropertyFactory.getInstance() .getBooleanProperty("servicecomb.loadbalance.filter.isolation.emptyInstanceProtectionEnabled", false).get()) { LOGGER.warn("All servers have been isolated, allow one of them based on load balance rule."); child.data(instances); } else { child.data(filteredServers); } parent.child("filterred", child); return child; }
protected LoadBalancer getOrCreateLoadBalancer(Invocation invocation) { DiscoveryContext context = new DiscoveryContext(); context.setInputParameters(invocation); VersionedCache serversVersionedCache = discoveryTree.discovery(context, invocation.getAppId(), invocation.getMicroserviceName(), invocation.getMicroserviceVersionRule()); invocation.addLocalContext(CONTEXT_KEY_SERVER_LIST, serversVersionedCache.data()); return loadBalancerMap .computeIfAbsent(serversVersionedCache.name(), name -> { return createLoadBalancer(invocation.getMicroserviceName()); }); }
@Override protected String findChildName(DiscoveryContext context, DiscoveryTreeNode parent) { Invocation invocation = context.getInputParameters(); return invocation.getMicroserviceQualifiedName(); }