public class DiscoveryTree extends Object
DiscoveryTree is used to: 1.get all instances by app/microserviceName/versionRule 2.filter all instances set, and output another set, the output set is instance or something else, this depend on filter set DiscoveryFilter have different types: 1.normal filter: just filter input set 2.grouping filter: will split input set to groups 3.convert filter: eg: convert from instance to endpoint different types can composite in one filter features: 1.every group combination(eg:1.0.0-2.0.0/1.0.0+/self/RESTful) relate to a loadBalancer instance 2.if some filter output set is empty, DiscoveryTree can support try refilter logic eg: if there is no available instances in self AZ, can refilter in other AZ red arrows in help to understand DiscoveryTree, show the refilter logic 3.every filter must try to cache result, avoid calculate every time. usage: 1.declare a field: DiscoveryTree discoveryTree = new DiscoveryTree(); 2.initialize: discoveryTree.loadFromSPI(DiscoveryFilter.class); // add filters by your requirement discoveryTree.addFilter(new EndpointDiscoveryFilter()); discoveryTree.sort(); 3.filter for a invocation: DiscoveryContext context = new DiscoveryContext(); context.setInputParameters(invocation); VersionedCache endpointsVersionedCache = discoveryTree.discovery(context, invocation.getAppId(), invocation.getMicroserviceName(), invocation.getMicroserviceVersionRule()); if (endpointsVersionedCache.isEmpty()) { // 404 not found logic ...... return; } // result is endpoints or something else, which is depends on your filter set List<Endpoint> endpoints = endpointsVersionedCache.data();
| Constructor and Description |
|---|
DiscoveryTree() |
| Modifier and Type | Method and Description |
|---|---|
void |
addFilter(DiscoveryFilter filter) |
DiscoveryTreeNode |
discovery(DiscoveryContext context,
String appId,
String microserviceName,
String versionRule) |
DiscoveryTreeNode |
discovery(DiscoveryContext context,
org.apache.servicecomb.foundation.common.cache.VersionedCache inputCache) |
protected DiscoveryTreeNode |
doDiscovery(DiscoveryContext context,
DiscoveryTreeNode parent) |
protected DiscoveryTreeNode |
getOrCreateRoot(org.apache.servicecomb.foundation.common.cache.VersionedCache inputCache) |
protected boolean |
isExpired(org.apache.servicecomb.foundation.common.cache.VersionedCache existing,
org.apache.servicecomb.foundation.common.cache.VersionedCache inputCache) |
protected boolean |
isMatch(org.apache.servicecomb.foundation.common.cache.VersionedCache existing,
org.apache.servicecomb.foundation.common.cache.VersionedCache inputCache) |
void |
loadFromSPI(Class<? extends DiscoveryFilter> cls) |
void |
sort() |
public void loadFromSPI(Class<? extends DiscoveryFilter> cls)
public void addFilter(DiscoveryFilter filter)
public void sort()
protected boolean isMatch(org.apache.servicecomb.foundation.common.cache.VersionedCache existing,
org.apache.servicecomb.foundation.common.cache.VersionedCache inputCache)
protected boolean isExpired(org.apache.servicecomb.foundation.common.cache.VersionedCache existing,
org.apache.servicecomb.foundation.common.cache.VersionedCache inputCache)
public DiscoveryTreeNode discovery(DiscoveryContext context, String appId, String microserviceName, String versionRule)
public DiscoveryTreeNode discovery(DiscoveryContext context, org.apache.servicecomb.foundation.common.cache.VersionedCache inputCache)
protected DiscoveryTreeNode getOrCreateRoot(org.apache.servicecomb.foundation.common.cache.VersionedCache inputCache)
protected DiscoveryTreeNode doDiscovery(DiscoveryContext context, DiscoveryTreeNode parent)
Copyright © 2017–2021 The Apache Software Foundation. All rights reserved.