@Override public void init(DiscoveryContext context, DiscoveryTreeNode parent) { Map<String, MicroserviceInstance> instances = parent.data(); Map<String, MicroserviceInstance> filteredServers = new HashMap<>(); for (String key : instances.keySet()) { MicroserviceInstance instance = instances.get(key); if (MicroserviceInstanceStatus.UP == instance.getStatus()) { filteredServers.put(key, instance); } } if (filteredServers.isEmpty()) { return; } DiscoveryTreeNode child = new DiscoveryTreeNode().subName(parent, UP_INSTANCES).data(filteredServers); parent.child(UP_INSTANCES, child); } }
public DiscoveryTreeNode fromCache(VersionedCache other) { this.cacheVersion = other.cacheVersion(); this.name = other.name(); this.data(other.data()); return this; } }
@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 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; }
@SuppressWarnings("unchecked") protected DiscoveryTreeNode createDiscoveryTreeNode(String expectTransportName, DiscoveryContext context, DiscoveryTreeNode parent) { List<Object> endpoints = new ArrayList<>(); for (MicroserviceInstance instance : ((Map<String, MicroserviceInstance>) parent.data()).values()) { for (String endpoint : instance.getEndpoints()) { try { URI uri = URI.create(endpoint); String transportName = uri.getScheme(); if (!isTransportNameMatch(transportName, expectTransportName)) { continue; } Object objEndpoint = createEndpoint(transportName, endpoint, instance); if (objEndpoint == null) { continue; } endpoints.add(objEndpoint); } catch (Exception e) { LOGGER.warn("unrecognized address find, ignore {}.", endpoint); } } } return new DiscoveryTreeNode() .subName(parent, expectTransportName) .data(endpoints); }
@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 protected void init(DiscoveryContext context, DiscoveryTreeNode parent) { MicroserviceInstance myself = RegistryUtils.getMicroserviceInstance(); Map<String, MicroserviceInstance> instancesRegionAndAZMatch = new HashMap<>(); Map<String, MicroserviceInstance> instancesAZMatch = new HashMap<>(); Map<String, MicroserviceInstance> instancesNoMatch = new HashMap<>(); Map<String, MicroserviceInstance> instances = parent.data(); for (String id : instances.keySet()) { MicroserviceInstance target = instances.get(id); if (regionAndAZMatch(myself, target)) { instancesRegionAndAZMatch.put(id, target); } else if (regionMatch(myself, target)) { instancesAZMatch.put(id, target); } else { instancesNoMatch.put(id, target); } } Map<String, DiscoveryTreeNode> children = new HashMap<>(); children.put(GROUP_RegionAndAZMatch, new DiscoveryTreeNode() .subName(parent, GROUP_RegionAndAZMatch) .data(instancesRegionAndAZMatch)); children.put(GROUP_instancesAZMatch, new DiscoveryTreeNode() .subName(parent, GROUP_instancesAZMatch) .data(instancesAZMatch)); children.put(GROUP_instancesNoMatch, new DiscoveryTreeNode() .subName(parent, GROUP_instancesNoMatch) .data(instancesNoMatch)); parent.children(children); }
@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); }
@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().data(filteredServers); parent.child("filterred", child); return child; }
public DiscoveryTreeNode fromCache(VersionedCache other) { this.cacheVersion = other.cacheVersion(); this.name = other.name(); this.data(other.data()); return this; } }
@SuppressWarnings("unchecked") protected DiscoveryTreeNode createDiscoveryTreeNode(String expectTransportName, DiscoveryContext context, DiscoveryTreeNode parent) { List<Object> endpoints = new ArrayList<>(); for (MicroserviceInstance instance : ((Map<String, MicroserviceInstance>) parent.data()).values()) { for (String endpoint : instance.getEndpoints()) { try { URI uri = URI.create(endpoint); String transportName = uri.getScheme(); if (!isTransportNameMatch(transportName, expectTransportName)) { continue; } Object objEndpoint = createEndpoint(transportName, endpoint, instance); if (objEndpoint == null) { continue; } endpoints.add(objEndpoint); } catch (Exception e) { LOGGER.warn("unrecognized address find, ignore {}.", endpoint); } } } return new DiscoveryTreeNode() .subName(parent, expectTransportName) .data(endpoints); }
@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 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 protected void init(DiscoveryContext context, DiscoveryTreeNode parent) { MicroserviceInstance myself = RegistryUtils.getMicroserviceInstance(); Map<String, MicroserviceInstance> instancesRegionAndAZMatch = new HashMap<>(); Map<String, MicroserviceInstance> instancesAZMatch = new HashMap<>(); Map<String, MicroserviceInstance> instancesNoMatch = new HashMap<>(); Map<String, MicroserviceInstance> instances = parent.data(); for (String id : instances.keySet()) { MicroserviceInstance target = instances.get(id); if (regionAndAZMatch(myself, target)) { instancesRegionAndAZMatch.put(id, target); } else if (regionMatch(myself, target)) { instancesAZMatch.put(id, target); } else { instancesNoMatch.put(id, target); } } Map<String, DiscoveryTreeNode> children = new HashMap<>(); children.put(GROUP_RegionAndAZMatch, new DiscoveryTreeNode() .subName(parent, GROUP_RegionAndAZMatch) .data(instancesRegionAndAZMatch)); children.put(GROUP_instancesAZMatch, new DiscoveryTreeNode() .subName(parent, GROUP_instancesAZMatch) .data(instancesAZMatch)); children.put(GROUP_instancesNoMatch, new DiscoveryTreeNode() .subName(parent, GROUP_instancesNoMatch) .data(instancesNoMatch)); parent.children(children); }
@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); }