update labelRouting to routing (#3077)

* update labelRouting to routing
pull/3082/head
HHoflittlefish777 2 years ago committed by GitHub
parent dbe8452833
commit 6b6a804258
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -20,12 +20,12 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import com.alibaba.cloud.commons.governance.event.RoutingDataChangedEvent; import com.alibaba.cloud.commons.governance.event.RoutingDataChangedEvent;
import com.alibaba.cloud.commons.governance.labelrouting.LabelRouteRule; import com.alibaba.cloud.commons.governance.routing.MatchService;
import com.alibaba.cloud.commons.governance.labelrouting.MatchService; import com.alibaba.cloud.commons.governance.routing.RoutingRule;
import com.alibaba.cloud.commons.governance.labelrouting.UnifiedRouteDataStructure; import com.alibaba.cloud.commons.governance.routing.UnifiedRoutingDataStructure;
import com.alibaba.cloud.commons.governance.labelrouting.rule.HeaderRule; import com.alibaba.cloud.commons.governance.routing.rule.HeaderRoutingRule;
import com.alibaba.cloud.commons.governance.labelrouting.rule.RouteRule; import com.alibaba.cloud.commons.governance.routing.rule.Rule;
import com.alibaba.cloud.commons.governance.labelrouting.rule.UrlRule; import com.alibaba.cloud.commons.governance.routing.rule.UrlRoutingRule;
import org.springframework.beans.BeansException; import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -85,26 +85,26 @@ public class ConsumerApplication {
@GetMapping("/add") @GetMapping("/add")
public void getDataFromControlPlaneTest() { public void getDataFromControlPlaneTest() {
List<RouteRule> routeRules = new ArrayList<>(); List<Rule> routeRules = new ArrayList<>();
List<MatchService> matchServices = new ArrayList<>(); List<MatchService> matchServices = new ArrayList<>();
UnifiedRouteDataStructure unifiedRouteDataStructure = new UnifiedRouteDataStructure(); UnifiedRoutingDataStructure unifiedRouteDataStructure = new UnifiedRoutingDataStructure();
unifiedRouteDataStructure.setTargetService("service-provider"); unifiedRouteDataStructure.setTargetService("service-provider");
LabelRouteRule labelRouteData = new LabelRouteRule(); RoutingRule labelRouteData = new RoutingRule();
labelRouteData.setDefaultRouteVersion("v1"); labelRouteData.setDefaultRouteVersion("v1");
RouteRule routeRule = new HeaderRule(); Rule routeRule = new HeaderRoutingRule();
routeRule.setType("header"); routeRule.setType("header");
routeRule.setCondition("="); routeRule.setCondition("=");
routeRule.setKey("tag"); routeRule.setKey("tag");
routeRule.setValue("gray"); routeRule.setValue("gray");
RouteRule routeRule1 = new UrlRule.Parameter(); Rule routeRule1 = new UrlRoutingRule.Parameter();
routeRule1.setType("parameter"); routeRule1.setType("parameter");
routeRule1.setCondition(">"); routeRule1.setCondition(">");
routeRule1.setKey("id"); routeRule1.setKey("id");
routeRule1.setValue("10"); routeRule1.setValue("10");
RouteRule routeRule2 = new UrlRule.Path(); Rule routeRule2 = new UrlRoutingRule.PathRoutingRule();
routeRule2.setType("path"); routeRule2.setType("path");
routeRule2.setCondition("="); routeRule2.setCondition("=");
routeRule2.setValue("/router-test"); routeRule2.setValue("/router-test");
@ -122,7 +122,7 @@ public class ConsumerApplication {
unifiedRouteDataStructure.setLabelRouteRule(labelRouteData); unifiedRouteDataStructure.setLabelRouteRule(labelRouteData);
List<UnifiedRouteDataStructure> unifiedRouteDataStructureList = new ArrayList<>(); List<UnifiedRoutingDataStructure> unifiedRouteDataStructureList = new ArrayList<>();
unifiedRouteDataStructureList.add(unifiedRouteDataStructure); unifiedRouteDataStructureList.add(unifiedRouteDataStructure);
applicationContext.publishEvent( applicationContext.publishEvent(
new RoutingDataChangedEvent(this, unifiedRouteDataStructureList)); new RoutingDataChangedEvent(this, unifiedRouteDataStructureList));
@ -130,26 +130,26 @@ public class ConsumerApplication {
@GetMapping("/update") @GetMapping("/update")
public void updateDataFromControlPlaneTest() { public void updateDataFromControlPlaneTest() {
List<RouteRule> routeRules = new ArrayList<>(); List<Rule> routeRules = new ArrayList<>();
List<MatchService> matchServices = new ArrayList<>(); List<MatchService> matchServices = new ArrayList<>();
UnifiedRouteDataStructure unifiedRouteDataStructure = new UnifiedRouteDataStructure(); UnifiedRoutingDataStructure unifiedRouteDataStructure = new UnifiedRoutingDataStructure();
unifiedRouteDataStructure.setTargetService("service-provider"); unifiedRouteDataStructure.setTargetService("service-provider");
LabelRouteRule labelRouteData = new LabelRouteRule(); RoutingRule labelRouteData = new RoutingRule();
labelRouteData.setDefaultRouteVersion("v1"); labelRouteData.setDefaultRouteVersion("v1");
RouteRule routeRule = new HeaderRule(); Rule routeRule = new HeaderRoutingRule();
routeRule.setType("header"); routeRule.setType("header");
routeRule.setCondition("="); routeRule.setCondition("=");
routeRule.setKey("tag"); routeRule.setKey("tag");
routeRule.setValue("gray"); routeRule.setValue("gray");
RouteRule routeRule1 = new UrlRule.Parameter(); Rule routeRule1 = new UrlRoutingRule.Parameter();
routeRule1.setType("parameter"); routeRule1.setType("parameter");
routeRule1.setCondition(">"); routeRule1.setCondition(">");
routeRule1.setKey("id"); routeRule1.setKey("id");
routeRule1.setValue("10"); routeRule1.setValue("10");
RouteRule routeRule2 = new UrlRule.Path(); Rule routeRule2 = new UrlRoutingRule.PathRoutingRule();
routeRule2.setType("path"); routeRule2.setType("path");
routeRule2.setCondition("="); routeRule2.setCondition("=");
routeRule2.setValue("/router-test"); routeRule2.setValue("/router-test");
@ -167,7 +167,7 @@ public class ConsumerApplication {
unifiedRouteDataStructure.setLabelRouteRule(labelRouteData); unifiedRouteDataStructure.setLabelRouteRule(labelRouteData);
List<UnifiedRouteDataStructure> unifiedRouteDataStructureList = new ArrayList<>(); List<UnifiedRoutingDataStructure> unifiedRouteDataStructureList = new ArrayList<>();
unifiedRouteDataStructureList.add(unifiedRouteDataStructure); unifiedRouteDataStructureList.add(unifiedRouteDataStructure);
applicationContext.publishEvent( applicationContext.publishEvent(
new RoutingDataChangedEvent(this, unifiedRouteDataStructureList)); new RoutingDataChangedEvent(this, unifiedRouteDataStructureList));

@ -18,7 +18,7 @@ package com.alibaba.cloud.commons.governance.event;
import java.util.Collection; import java.util.Collection;
import com.alibaba.cloud.commons.governance.labelrouting.UnifiedRouteDataStructure; import com.alibaba.cloud.commons.governance.routing.UnifiedRoutingDataStructure;
/** /**
* @author musi * @author musi
@ -30,15 +30,15 @@ public class RoutingDataChangedEvent extends GovernanceEvent {
/** /**
* Configuration for Label Routing. * Configuration for Label Routing.
*/ */
private final Collection<UnifiedRouteDataStructure> untiedRouterDataStructureList; private final Collection<UnifiedRoutingDataStructure> untiedRouterDataStructureList;
public RoutingDataChangedEvent(Object source, public RoutingDataChangedEvent(Object source,
Collection<UnifiedRouteDataStructure> untiedRouterDataStructureList) { Collection<UnifiedRoutingDataStructure> untiedRouterDataStructureList) {
super(source); super(source);
this.untiedRouterDataStructureList = untiedRouterDataStructureList; this.untiedRouterDataStructureList = untiedRouterDataStructureList;
} }
public Collection<UnifiedRouteDataStructure> getUntiedRouterDataStructureList() { public Collection<UnifiedRoutingDataStructure> getUntiedRouterDataStructureList() {
return untiedRouterDataStructureList; return untiedRouterDataStructureList;
} }

@ -14,12 +14,12 @@
* limitations under the License. * limitations under the License.
*/ */
package com.alibaba.cloud.commons.governance.labelrouting; package com.alibaba.cloud.commons.governance.routing;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import com.alibaba.cloud.commons.governance.labelrouting.rule.RouteRule; import com.alibaba.cloud.commons.governance.routing.rule.Rule;
/** /**
* @author HH * @author HH
@ -27,7 +27,7 @@ import com.alibaba.cloud.commons.governance.labelrouting.rule.RouteRule;
*/ */
public class MatchService { public class MatchService {
private List<RouteRule> ruleList; private List<Rule> ruleList;
private String version; private String version;
@ -43,11 +43,11 @@ public class MatchService {
this.fallbackVersion = fallbackVersion; this.fallbackVersion = fallbackVersion;
} }
public List<RouteRule> getRuleList() { public List<Rule> getRuleList() {
return ruleList; return ruleList;
} }
public void setRuleList(List<RouteRule> ruleList) { public void setRuleList(List<Rule> ruleList) {
this.ruleList = ruleList; this.ruleList = ruleList;
} }

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package com.alibaba.cloud.commons.governance.labelrouting; package com.alibaba.cloud.commons.governance.routing;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@ -23,18 +23,18 @@ import java.util.Objects;
* @author HH * @author HH
* @since 2.2.10-RC1 * @since 2.2.10-RC1
*/ */
public class LabelRouteRule { public class RoutingRule {
private String defaultRouteVersion; private String defaultRoutingVersion;
private List<MatchService> matchRouteList; private List<MatchService> matchRouteList;
public String getDefaultRouteVersion() { public String getDefaultRouteVersion() {
return defaultRouteVersion; return defaultRoutingVersion;
} }
public void setDefaultRouteVersion(String defaultRouteVersion) { public void setDefaultRouteVersion(String defaultRouteVersion) {
this.defaultRouteVersion = defaultRouteVersion; this.defaultRoutingVersion = defaultRouteVersion;
} }
public List<MatchService> getMatchRouteList() { public List<MatchService> getMatchRouteList() {
@ -53,19 +53,19 @@ public class LabelRouteRule {
if (o == null || getClass() != o.getClass()) { if (o == null || getClass() != o.getClass()) {
return false; return false;
} }
LabelRouteRule that = (LabelRouteRule) o; RoutingRule that = (RoutingRule) o;
return Objects.equals(defaultRouteVersion, that.defaultRouteVersion) return Objects.equals(defaultRoutingVersion, that.defaultRoutingVersion)
&& Objects.equals(getMatchRouteList(), that.getMatchRouteList()); && Objects.equals(getMatchRouteList(), that.getMatchRouteList());
} }
@Override @Override
public int hashCode() { public int hashCode() {
return Objects.hash(defaultRouteVersion, getMatchRouteList()); return Objects.hash(defaultRoutingVersion, getMatchRouteList());
} }
@Override @Override
public String toString() { public String toString() {
return "LabelRouteData{" + "defaultRouteVersion='" + defaultRouteVersion + '\'' return "LabelRouteData{" + "defaultRouteVersion='" + defaultRoutingVersion + '\''
+ ", matchRouteList=" + matchRouteList + '}'; + ", matchRouteList=" + matchRouteList + '}';
} }

@ -14,24 +14,24 @@
* limitations under the License. * limitations under the License.
*/ */
package com.alibaba.cloud.commons.governance.labelrouting; package com.alibaba.cloud.commons.governance.routing;
/** /**
* @author HH * @author HH
* @since 2.2.10-RC1 * @since 2.2.10-RC1
*/ */
public class UnifiedRouteDataStructure { public class UnifiedRoutingDataStructure {
private LabelRouteRule labelRouteRule; private RoutingRule routingRule;
private String targetService; private String targetService;
public LabelRouteRule getLabelRouteRule() { public RoutingRule getLabelRouteRule() {
return labelRouteRule; return routingRule;
} }
public void setLabelRouteRule(LabelRouteRule labelRouteRule) { public void setLabelRouteRule(RoutingRule labelRouteRule) {
this.labelRouteRule = labelRouteRule; this.routingRule = labelRouteRule;
} }
public String getTargetService() { public String getTargetService() {
@ -44,7 +44,7 @@ public class UnifiedRouteDataStructure {
@Override @Override
public String toString() { public String toString() {
return "UntiedRouteDataStructure{" + "labelRouteData=" + labelRouteRule return "UntiedRoutingDataStructure{" + "RoutingData=" + routingRule
+ ", targetService='" + targetService + '\'' + '}'; + ", targetService='" + targetService + '\'' + '}';
} }

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package com.alibaba.cloud.commons.governance.labelrouting.rule; package com.alibaba.cloud.commons.governance.routing.rule;
import java.util.Objects; import java.util.Objects;
@ -22,7 +22,7 @@ import java.util.Objects;
* @author HH * @author HH
* @since 2.2.10-RC1 * @since 2.2.10-RC1
*/ */
public class HeaderRule implements RouteRule { public class HeaderRoutingRule implements Rule {
private String type; private String type;
@ -80,7 +80,7 @@ public class HeaderRule implements RouteRule {
if (o == null || getClass() != o.getClass()) { if (o == null || getClass() != o.getClass()) {
return false; return false;
} }
HeaderRule that = (HeaderRule) o; HeaderRoutingRule that = (HeaderRoutingRule) o;
return Objects.equals(getType(), that.getType()) return Objects.equals(getType(), that.getType())
&& Objects.equals(getCondition(), that.getCondition()) && Objects.equals(getCondition(), that.getCondition())
&& Objects.equals(getKey(), that.getKey()) && Objects.equals(getKey(), that.getKey())
@ -94,8 +94,8 @@ public class HeaderRule implements RouteRule {
@Override @Override
public String toString() { public String toString() {
return "HeaderRule{" + "type='" + type + '\'' + ", condition='" + condition + '\'' return "HeaderRoutingRule{" + "type='" + type + '\'' + ", condition='" + condition
+ ", key='" + key + '\'' + ", value='" + value + '\'' + '}'; + '\'' + ", key='" + key + '\'' + ", value='" + value + '\'' + '}';
} }
} }

@ -14,13 +14,13 @@
* limitations under the License. * limitations under the License.
*/ */
package com.alibaba.cloud.commons.governance.labelrouting.rule; package com.alibaba.cloud.commons.governance.routing.rule;
/** /**
* @author HH * @author HH
* @since 2.2.10-RC1 * @since 2.2.10-RC1
*/ */
public interface RouteRule { public interface Rule {
/** /**
* get type of rule. * get type of rule.

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package com.alibaba.cloud.commons.governance.labelrouting.rule; package com.alibaba.cloud.commons.governance.routing.rule;
import java.util.Objects; import java.util.Objects;
@ -22,9 +22,9 @@ import java.util.Objects;
* @author HH * @author HH
* @since 2.2.10-RC1 * @since 2.2.10-RC1
*/ */
public class UrlRule { public class UrlRoutingRule {
public static class Path implements RouteRule { public static class PathRoutingRule implements Rule {
private String type; private String type;
@ -80,7 +80,7 @@ public class UrlRule {
if (o == null || getClass() != o.getClass()) { if (o == null || getClass() != o.getClass()) {
return false; return false;
} }
Path path = (Path) o; PathRoutingRule path = (PathRoutingRule) o;
return Objects.equals(getType(), path.getType()) return Objects.equals(getType(), path.getType())
&& Objects.equals(getCondition(), path.getCondition()) && Objects.equals(getCondition(), path.getCondition())
&& Objects.equals(getValue(), path.getValue()); && Objects.equals(getValue(), path.getValue());
@ -93,13 +93,13 @@ public class UrlRule {
@Override @Override
public String toString() { public String toString() {
return "Path{" + "type='" + type + '\'' + ", condition='" + condition + '\'' return "PathRoutingRule{" + "type='" + type + '\'' + ", condition='"
+ ", value='" + value + '\'' + '}'; + condition + '\'' + ", value='" + value + '\'' + '}';
} }
} }
public static class Parameter implements RouteRule { public static class Parameter implements Rule {
private String type; private String type;
@ -171,8 +171,9 @@ public class UrlRule {
@Override @Override
public String toString() { public String toString() {
return "Parameter{" + "type='" + type + '\'' + ", condition='" + condition return "ParameterRoutingRule{" + "type='" + type + '\'' + ", condition='"
+ '\'' + ", key='" + key + '\'' + ", value='" + value + '\'' + '}'; + condition + '\'' + ", key='" + key + '\'' + ", value='" + value
+ '\'' + '}';
} }
} }

@ -22,12 +22,12 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import com.alibaba.cloud.commons.governance.event.RoutingDataChangedEvent; import com.alibaba.cloud.commons.governance.event.RoutingDataChangedEvent;
import com.alibaba.cloud.commons.governance.labelrouting.LabelRouteRule; import com.alibaba.cloud.commons.governance.routing.MatchService;
import com.alibaba.cloud.commons.governance.labelrouting.MatchService; import com.alibaba.cloud.commons.governance.routing.RoutingRule;
import com.alibaba.cloud.commons.governance.labelrouting.UnifiedRouteDataStructure; import com.alibaba.cloud.commons.governance.routing.UnifiedRoutingDataStructure;
import com.alibaba.cloud.commons.governance.labelrouting.rule.HeaderRule; import com.alibaba.cloud.commons.governance.routing.rule.HeaderRoutingRule;
import com.alibaba.cloud.commons.governance.labelrouting.rule.RouteRule; import com.alibaba.cloud.commons.governance.routing.rule.Rule;
import com.alibaba.cloud.commons.governance.labelrouting.rule.UrlRule; import com.alibaba.cloud.commons.governance.routing.rule.UrlRoutingRule;
import com.alibaba.cloud.commons.lang.StringUtils; import com.alibaba.cloud.commons.lang.StringUtils;
import com.alibaba.cloud.commons.matcher.StringMatcherType; import com.alibaba.cloud.commons.matcher.StringMatcherType;
import com.alibaba.cloud.governance.istio.constant.IstioConstants; import com.alibaba.cloud.governance.istio.constant.IstioConstants;
@ -54,11 +54,11 @@ public class RoutingXdsResolveFilter
if (routeConfigurations == null) { if (routeConfigurations == null) {
return false; return false;
} }
Map<String, UnifiedRouteDataStructure> untiedRouteDataStructures = new HashMap<>(); Map<String, UnifiedRoutingDataStructure> untiedRouteDataStructures = new HashMap<>();
for (RouteConfiguration routeConfiguration : routeConfigurations) { for (RouteConfiguration routeConfiguration : routeConfigurations) {
List<VirtualHost> virtualHosts = routeConfiguration.getVirtualHostsList(); List<VirtualHost> virtualHosts = routeConfiguration.getVirtualHostsList();
for (VirtualHost virtualHost : virtualHosts) { for (VirtualHost virtualHost : virtualHosts) {
UnifiedRouteDataStructure unifiedRouteDataStructure = new UnifiedRouteDataStructure(); UnifiedRoutingDataStructure unifiedRouteDataStructure = new UnifiedRoutingDataStructure();
String targetService = ""; String targetService = "";
String[] serviceAndPort = virtualHost.getName().split(":"); String[] serviceAndPort = virtualHost.getName().split(":");
if (serviceAndPort.length > 0) { if (serviceAndPort.length > 0) {
@ -69,7 +69,7 @@ public class RoutingXdsResolveFilter
} }
unifiedRouteDataStructure.setTargetService(targetService); unifiedRouteDataStructure.setTargetService(targetService);
List<Route> routes = virtualHost.getRoutesList(); List<Route> routes = virtualHost.getRoutesList();
LabelRouteRule labelRouteRule = getRouteData(routes); RoutingRule labelRouteRule = getRouteData(routes);
unifiedRouteDataStructure.setLabelRouteRule(labelRouteRule); unifiedRouteDataStructure.setLabelRouteRule(labelRouteRule);
untiedRouteDataStructures.put( untiedRouteDataStructures.put(
unifiedRouteDataStructure.getTargetService(), unifiedRouteDataStructure.getTargetService(),
@ -81,9 +81,9 @@ public class RoutingXdsResolveFilter
return true; return true;
} }
private LabelRouteRule getRouteData(List<Route> routes) { private RoutingRule getRouteData(List<Route> routes) {
List<MatchService> matchServices = new ArrayList<>(); List<MatchService> matchServices = new ArrayList<>();
LabelRouteRule labelRouteRule = new LabelRouteRule(); RoutingRule labelRouteRule = new RoutingRule();
for (Route route : routes) { for (Route route : routes) {
String cluster = route.getRoute().getCluster(); String cluster = route.getRoute().getCluster();
if (StringUtils.isNotEmpty(cluster)) { if (StringUtils.isNotEmpty(cluster)) {
@ -122,10 +122,12 @@ public class RoutingXdsResolveFilter
return matchService; return matchService;
} }
private List<RouteRule> match2RouteRules(RouteMatch routeMatch) { private List<Rule> match2RouteRules(
List<RouteRule> routeRules = new ArrayList<>(); RouteMatch routeMatch) {
List<Rule> routeRules = new ArrayList<>();
for (HeaderMatcher headerMatcher : routeMatch.getHeadersList()) { for (HeaderMatcher headerMatcher : routeMatch.getHeadersList()) {
HeaderRule headerRule = ConvUtil.headerMatcher2HeaderRule(headerMatcher); HeaderRoutingRule headerRule = ConvUtil
.headerMatcher2HeaderRule(headerMatcher);
if (headerRule != null) { if (headerRule != null) {
routeRules.add(headerRule); routeRules.add(headerRule);
} }
@ -133,14 +135,14 @@ public class RoutingXdsResolveFilter
for (QueryParameterMatcher parameterMatcher : routeMatch for (QueryParameterMatcher parameterMatcher : routeMatch
.getQueryParametersList()) { .getQueryParametersList()) {
UrlRule.Parameter parameter = ConvUtil UrlRoutingRule.Parameter parameter = ConvUtil
.parameterMatcher2ParameterRule(parameterMatcher); .parameterMatcher2ParameterRule(parameterMatcher);
if (parameter != null) { if (parameter != null) {
routeRules.add(parameter); routeRules.add(parameter);
} }
} }
UrlRule.Path path = new UrlRule.Path(); UrlRoutingRule.PathRoutingRule path = new UrlRoutingRule.PathRoutingRule();
path.setType(PATH); path.setType(PATH);
switch (routeMatch.getPathSpecifierCase()) { switch (routeMatch.getPathSpecifierCase()) {
case PREFIX: case PREFIX:

@ -16,8 +16,8 @@
package com.alibaba.cloud.governance.istio.util; package com.alibaba.cloud.governance.istio.util;
import com.alibaba.cloud.commons.governance.labelrouting.rule.HeaderRule; import com.alibaba.cloud.commons.governance.routing.rule.HeaderRoutingRule;
import com.alibaba.cloud.commons.governance.labelrouting.rule.UrlRule; import com.alibaba.cloud.commons.governance.routing.rule.UrlRoutingRule;
import com.alibaba.cloud.commons.lang.StringUtils; import com.alibaba.cloud.commons.lang.StringUtils;
import com.alibaba.cloud.commons.matcher.IpMatcher; import com.alibaba.cloud.commons.matcher.IpMatcher;
import com.alibaba.cloud.commons.matcher.StringMatcher; import com.alibaba.cloud.commons.matcher.StringMatcher;
@ -125,9 +125,9 @@ public final class ConvUtil {
return headerMatcher.getStringMatch(); return headerMatcher.getStringMatch();
} }
public static UrlRule.Parameter parameterMatcher2ParameterRule( public static UrlRoutingRule.Parameter parameterMatcher2ParameterRule(
QueryParameterMatcher queryParameterMatcher) { QueryParameterMatcher queryParameterMatcher) {
UrlRule.Parameter parameter = new UrlRule.Parameter(); UrlRoutingRule.Parameter parameter = new UrlRoutingRule.Parameter();
StringMatcher stringMatcher = ConvUtil StringMatcher stringMatcher = ConvUtil
.convStringMatcher(queryParameterMatcher.getStringMatch()); .convStringMatcher(queryParameterMatcher.getStringMatch());
if (stringMatcher != null) { if (stringMatcher != null) {
@ -140,11 +140,12 @@ public final class ConvUtil {
return null; return null;
} }
public static HeaderRule headerMatcher2HeaderRule(HeaderMatcher headerMatcher) { public static HeaderRoutingRule headerMatcher2HeaderRule(
HeaderMatcher headerMatcher) {
StringMatcher stringMatcher = ConvUtil StringMatcher stringMatcher = ConvUtil
.convStringMatcher(ConvUtil.headerMatch2StringMatch(headerMatcher)); .convStringMatcher(ConvUtil.headerMatch2StringMatch(headerMatcher));
if (stringMatcher != null) { if (stringMatcher != null) {
HeaderRule headerRule = new HeaderRule(); HeaderRoutingRule headerRule = new HeaderRoutingRule();
headerRule.setCondition(stringMatcher.getType().toString()); headerRule.setCondition(stringMatcher.getType().toString());
headerRule.setKey(headerMatcher.getName()); headerRule.setKey(headerMatcher.getName());
headerRule.setValue(stringMatcher.getMatcher()); headerRule.setValue(stringMatcher.getMatcher());

@ -27,9 +27,9 @@ import com.alibaba.cloud.governance.auth.AuthenticationAutoConfiguration;
import com.alibaba.cloud.governance.auth.repository.AuthRepository; import com.alibaba.cloud.governance.auth.repository.AuthRepository;
import com.alibaba.cloud.governance.istio.protocol.impl.LdsProtocol; import com.alibaba.cloud.governance.istio.protocol.impl.LdsProtocol;
import com.alibaba.cloud.governance.istio.protocol.impl.RdsProtocol; import com.alibaba.cloud.governance.istio.protocol.impl.RdsProtocol;
import com.alibaba.cloud.router.LabelRoutingAutoConfiguration; import com.alibaba.cloud.routing.RoutingAutoConfiguration;
import com.alibaba.cloud.router.repository.FilterService; import com.alibaba.cloud.routing.repository.FilterService;
import com.alibaba.cloud.router.repository.RouteDataRepository; import com.alibaba.cloud.routing.repository.RoutingDataRepository;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import io.envoyproxy.envoy.config.listener.v3.Listener; import io.envoyproxy.envoy.config.listener.v3.Listener;
import io.envoyproxy.envoy.config.route.v3.RouteConfiguration; import io.envoyproxy.envoy.config.route.v3.RouteConfiguration;
@ -71,7 +71,7 @@ public class XdsRulesTests {
private AuthRepository authRepository; private AuthRepository authRepository;
@Autowired @Autowired
private RouteDataRepository routeDataRepository; private RoutingDataRepository routeDataRepository;
@Autowired @Autowired
private LdsProtocol ldsProtocol; private LdsProtocol ldsProtocol;
@ -133,7 +133,7 @@ public class XdsRulesTests {
@Configuration @Configuration
@EnableAutoConfiguration @EnableAutoConfiguration
@ImportAutoConfiguration({ XdsAutoConfiguration.class, @ImportAutoConfiguration({ XdsAutoConfiguration.class,
AuthenticationAutoConfiguration.class, LabelRoutingAutoConfiguration.class }) AuthenticationAutoConfiguration.class, RoutingAutoConfiguration.class })
public static class TestConfig { public static class TestConfig {
@Bean(name = TARGET_SERVICE + FilterService.FEIGN_CLIENT_BEAN_SPECIFICATION) @Bean(name = TARGET_SERVICE + FilterService.FEIGN_CLIENT_BEAN_SPECIFICATION)

@ -20,7 +20,7 @@ import java.util.Collection;
import java.util.List; import java.util.List;
import com.alibaba.cloud.commons.governance.event.RoutingDataChangedEvent; import com.alibaba.cloud.commons.governance.event.RoutingDataChangedEvent;
import com.alibaba.cloud.commons.governance.labelrouting.UnifiedRouteDataStructure; import com.alibaba.cloud.commons.governance.routing.UnifiedRoutingDataStructure;
import com.alibaba.cloud.commons.lang.StringUtils; import com.alibaba.cloud.commons.lang.StringUtils;
import com.alibaba.cloud.governance.opensergo.util.ConvUtils; import com.alibaba.cloud.governance.opensergo.util.ConvUtils;
import com.google.protobuf.InvalidProtocolBufferException; import com.google.protobuf.InvalidProtocolBufferException;
@ -92,7 +92,7 @@ public class OpenSergoTrafficExchanger implements ApplicationContextAware {
log.debug("OpenSergo client subscribeKey:{} receive message :{}", log.debug("OpenSergo client subscribeKey:{} receive message :{}",
subscribeKey, dataList); subscribeKey, dataList);
try { try {
Collection<UnifiedRouteDataStructure> rules = openSergoTrafficRouterParser Collection<UnifiedRoutingDataStructure> rules = openSergoTrafficRouterParser
.resolveLabelRouting( .resolveLabelRouting(
(List<RouteConfiguration>) dataList); (List<RouteConfiguration>) dataList);
applicationContext.publishEvent( applicationContext.publishEvent(

@ -22,12 +22,12 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import com.alibaba.cloud.commons.governance.labelrouting.LabelRouteRule; import com.alibaba.cloud.commons.governance.routing.MatchService;
import com.alibaba.cloud.commons.governance.labelrouting.MatchService; import com.alibaba.cloud.commons.governance.routing.RoutingRule;
import com.alibaba.cloud.commons.governance.labelrouting.UnifiedRouteDataStructure; import com.alibaba.cloud.commons.governance.routing.UnifiedRoutingDataStructure;
import com.alibaba.cloud.commons.governance.labelrouting.rule.HeaderRule; import com.alibaba.cloud.commons.governance.routing.rule.HeaderRoutingRule;
import com.alibaba.cloud.commons.governance.labelrouting.rule.RouteRule; import com.alibaba.cloud.commons.governance.routing.rule.Rule;
import com.alibaba.cloud.commons.governance.labelrouting.rule.UrlRule; import com.alibaba.cloud.commons.governance.routing.rule.UrlRoutingRule;
import com.alibaba.cloud.commons.lang.StringUtils; import com.alibaba.cloud.commons.lang.StringUtils;
import com.alibaba.cloud.commons.matcher.StringMatcher; import com.alibaba.cloud.commons.matcher.StringMatcher;
import com.alibaba.cloud.commons.matcher.StringMatcherType; import com.alibaba.cloud.commons.matcher.StringMatcherType;
@ -70,17 +70,17 @@ public class OpenSergoTrafficRouterParser {
* @return spring cloud alibaba router rules. * @return spring cloud alibaba router rules.
* @throws InvalidProtocolBufferException transform exception. * @throws InvalidProtocolBufferException transform exception.
*/ */
public Collection<UnifiedRouteDataStructure> resolveLabelRouting( public Collection<UnifiedRoutingDataStructure> resolveLabelRouting(
List<RouteConfiguration> routeConfigurations) List<RouteConfiguration> routeConfigurations)
throws InvalidProtocolBufferException { throws InvalidProtocolBufferException {
if (routeConfigurations == null) { if (routeConfigurations == null) {
return new ArrayList<>(); return new ArrayList<>();
} }
Map<String, UnifiedRouteDataStructure> unifiedRouteDataStructures = new HashMap<>(); Map<String, UnifiedRoutingDataStructure> unifiedRouteDataStructures = new HashMap<>();
for (RouteConfiguration routeConfiguration : routeConfigurations) { for (RouteConfiguration routeConfiguration : routeConfigurations) {
List<VirtualHost> virtualHosts = routeConfiguration.getVirtualHostsList(); List<VirtualHost> virtualHosts = routeConfiguration.getVirtualHostsList();
for (VirtualHost virtualHost : virtualHosts) { for (VirtualHost virtualHost : virtualHosts) {
UnifiedRouteDataStructure unifiedRouteDataStructure = new UnifiedRouteDataStructure(); UnifiedRoutingDataStructure unifiedRouteDataStructure = new UnifiedRoutingDataStructure();
String targetService = ""; String targetService = "";
String[] serviceAndPort = virtualHost.getName().split(":"); String[] serviceAndPort = virtualHost.getName().split(":");
if (serviceAndPort.length > 0) { if (serviceAndPort.length > 0) {
@ -88,7 +88,7 @@ public class OpenSergoTrafficRouterParser {
} }
unifiedRouteDataStructure.setTargetService(targetService); unifiedRouteDataStructure.setTargetService(targetService);
List<Route> routes = virtualHost.getRoutesList(); List<Route> routes = virtualHost.getRoutesList();
LabelRouteRule labelRouteRule = getLabelRouteData(routes); RoutingRule labelRouteRule = getLabelRouteData(routes);
unifiedRouteDataStructure.setLabelRouteRule(labelRouteRule); unifiedRouteDataStructure.setLabelRouteRule(labelRouteRule);
unifiedRouteDataStructures.put( unifiedRouteDataStructures.put(
unifiedRouteDataStructure.getTargetService(), unifiedRouteDataStructure.getTargetService(),
@ -98,10 +98,10 @@ public class OpenSergoTrafficRouterParser {
return unifiedRouteDataStructures.values(); return unifiedRouteDataStructures.values();
} }
private LabelRouteRule getLabelRouteData(List<Route> routes) private RoutingRule getLabelRouteData(List<Route> routes)
throws InvalidProtocolBufferException { throws InvalidProtocolBufferException {
List<MatchService> matchServices = new ArrayList<>(); List<MatchService> matchServices = new ArrayList<>();
LabelRouteRule labelRouteRule = new LabelRouteRule(); RoutingRule labelRouteRule = new RoutingRule();
for (Route route : routes) { for (Route route : routes) {
ClusterSpecifierPlugin clusterSpecifierPlugin = route.getRoute() ClusterSpecifierPlugin clusterSpecifierPlugin = route.getRoute()
.getInlineClusterSpecifierPlugin(); .getInlineClusterSpecifierPlugin();
@ -175,10 +175,10 @@ public class OpenSergoTrafficRouterParser {
return version; return version;
} }
private List<RouteRule> match2RouteRules(RouteMatch routeMatch) { private List<Rule> match2RouteRules(RouteMatch routeMatch) {
List<RouteRule> routeRules = new ArrayList<>(); List<Rule> routeRules = new ArrayList<>();
for (HeaderMatcher headerMatcher : routeMatch.getHeadersList()) { for (HeaderMatcher headerMatcher : routeMatch.getHeadersList()) {
HeaderRule headerRule = headerMatcher2HeaderRule(headerMatcher); HeaderRoutingRule headerRule = headerMatcher2HeaderRule(headerMatcher);
if (headerRule != null) { if (headerRule != null) {
routeRules.add(headerRule); routeRules.add(headerRule);
} }
@ -186,14 +186,14 @@ public class OpenSergoTrafficRouterParser {
for (QueryParameterMatcher parameterMatcher : routeMatch for (QueryParameterMatcher parameterMatcher : routeMatch
.getQueryParametersList()) { .getQueryParametersList()) {
UrlRule.Parameter parameter = parameterMatcher2ParameterRule( UrlRoutingRule.Parameter parameter = parameterMatcher2ParameterRule(
parameterMatcher); parameterMatcher);
if (parameter != null) { if (parameter != null) {
routeRules.add(parameter); routeRules.add(parameter);
} }
} }
UrlRule.Path path = new UrlRule.Path(); UrlRoutingRule.PathRoutingRule path = new UrlRoutingRule.PathRoutingRule();
path.setType(PATH); path.setType(PATH);
switch (routeMatch.getPathSpecifierCase()) { switch (routeMatch.getPathSpecifierCase()) {
case PREFIX: case PREFIX:
@ -222,9 +222,9 @@ public class OpenSergoTrafficRouterParser {
return routeRules; return routeRules;
} }
private UrlRule.Parameter parameterMatcher2ParameterRule( private UrlRoutingRule.Parameter parameterMatcher2ParameterRule(
QueryParameterMatcher queryParameterMatcher) { QueryParameterMatcher queryParameterMatcher) {
UrlRule.Parameter parameter = new UrlRule.Parameter(); UrlRoutingRule.Parameter parameter = new UrlRoutingRule.Parameter();
StringMatcher stringMatcher = ConvUtils StringMatcher stringMatcher = ConvUtils
.convStringMatcher(queryParameterMatcher.getStringMatch()); .convStringMatcher(queryParameterMatcher.getStringMatch());
if (stringMatcher != null) { if (stringMatcher != null) {
@ -237,11 +237,11 @@ public class OpenSergoTrafficRouterParser {
return null; return null;
} }
private HeaderRule headerMatcher2HeaderRule(HeaderMatcher headerMatcher) { private HeaderRoutingRule headerMatcher2HeaderRule(HeaderMatcher headerMatcher) {
StringMatcher stringMatcher = ConvUtils StringMatcher stringMatcher = ConvUtils
.convStringMatcher(ConvUtils.headerMatch2StringMatch(headerMatcher)); .convStringMatcher(ConvUtils.headerMatch2StringMatch(headerMatcher));
if (stringMatcher != null) { if (stringMatcher != null) {
HeaderRule headerRule = new HeaderRule(); HeaderRoutingRule headerRule = new HeaderRoutingRule();
headerRule.setCondition(stringMatcher.getType().toString()); headerRule.setCondition(stringMatcher.getType().toString());
headerRule.setKey(headerMatcher.getName()); headerRule.setKey(headerMatcher.getName());
headerRule.setValue(stringMatcher.getMatcher()); headerRule.setValue(stringMatcher.getMatcher());

@ -20,7 +20,7 @@ import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import com.alibaba.cloud.commons.governance.labelrouting.UnifiedRouteDataStructure; import com.alibaba.cloud.commons.governance.routing.UnifiedRoutingDataStructure;
import io.envoyproxy.envoy.config.route.v3.HeaderMatcher; import io.envoyproxy.envoy.config.route.v3.HeaderMatcher;
import io.envoyproxy.envoy.config.route.v3.Route; import io.envoyproxy.envoy.config.route.v3.Route;
import io.envoyproxy.envoy.config.route.v3.RouteAction; import io.envoyproxy.envoy.config.route.v3.RouteAction;
@ -62,7 +62,7 @@ public class OpenSergoRuleTests {
.setName("service-provider").addVirtualHosts(virtualHost).build(); .setName("service-provider").addVirtualHosts(virtualHost).build();
List<RouteConfiguration> routeConfigurations = new ArrayList<>(); List<RouteConfiguration> routeConfigurations = new ArrayList<>();
routeConfigurations.add(routeConfiguration); routeConfigurations.add(routeConfiguration);
Collection<UnifiedRouteDataStructure> rules = openSergoTrafficRouterParser Collection<UnifiedRoutingDataStructure> rules = openSergoTrafficRouterParser
.resolveLabelRouting(routeConfigurations); .resolveLabelRouting(routeConfigurations);
Assert.assertEquals(rules.size(), 1); Assert.assertEquals(rules.size(), 1);
} }

@ -14,11 +14,11 @@
* limitations under the License. * limitations under the License.
*/ */
package com.alibaba.cloud.router; package com.alibaba.cloud.routing;
import com.alibaba.cloud.router.listener.LabelRouteDataListener; import com.alibaba.cloud.routing.listener.RoutingDataListener;
import com.alibaba.cloud.router.repository.FilterService; import com.alibaba.cloud.routing.repository.FilterService;
import com.alibaba.cloud.router.repository.RouteDataRepository; import com.alibaba.cloud.routing.repository.RoutingDataRepository;
import org.springframework.boot.autoconfigure.AutoConfigureOrder; import org.springframework.boot.autoconfigure.AutoConfigureOrder;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@ -30,18 +30,18 @@ import org.springframework.context.annotation.Configuration;
* @since 2.2.10-RC1 * @since 2.2.10-RC1
*/ */
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
@AutoConfigureOrder(LabelRoutingAutoConfiguration.LABEL_ROUTING_AUTO_CONFIG_ORDER) @AutoConfigureOrder(RoutingAutoConfiguration.ROUTING_AUTO_CONFIG_ORDER)
public class LabelRoutingAutoConfiguration { public class RoutingAutoConfiguration {
/** /**
* Order of label routing auto config. * Order of label routing auto config.
*/ */
public static final int LABEL_ROUTING_AUTO_CONFIG_ORDER = 10; public static final int ROUTING_AUTO_CONFIG_ORDER = 10;
@Bean @Bean
@ConditionalOnMissingBean @ConditionalOnMissingBean
public RouteDataRepository routeDataRepository() { public RoutingDataRepository routingDataRepository() {
return new RouteDataRepository(); return new RoutingDataRepository();
} }
@Bean @Bean
@ -51,9 +51,9 @@ public class LabelRoutingAutoConfiguration {
} }
@Bean @Bean
public LabelRouteDataListener labelRouteDataListener( public RoutingDataListener routingDataListener(
RouteDataRepository routeDataRepository, FilterService filterService) { RoutingDataRepository routingDataRepository, FilterService filterService) {
return new LabelRouteDataListener(routeDataRepository, filterService); return new RoutingDataListener(routingDataRepository, filterService);
} }
} }

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package com.alibaba.cloud.router; package com.alibaba.cloud.routing;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
@ -22,8 +22,8 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
* @author HH * @author HH
* @since 2.2.10-RC1 * @since 2.2.10-RC1
*/ */
@ConfigurationProperties(prefix = RouterProperties.PROPERTY_PREFIX) @ConfigurationProperties(prefix = RoutingProperties.PROPERTY_PREFIX)
public class RouterProperties { public class RoutingProperties {
/** /**
* Properties prefix. * Properties prefix.

@ -14,9 +14,9 @@
* limitations under the License. * limitations under the License.
*/ */
package com.alibaba.cloud.router; package com.alibaba.cloud.routing;
import com.alibaba.cloud.router.publish.TargetServiceChangedPublisher; import com.alibaba.cloud.routing.publish.TargetServiceChangedPublisher;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
@ -28,13 +28,13 @@ import org.springframework.context.annotation.Configuration;
* @since 2.2.10-RC1 * @since 2.2.10-RC1
*/ */
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties({ RouterProperties.class }) @EnableConfigurationProperties({ RoutingProperties.class })
public class RouterPropertiesAutoConfiguration { public class RoutingPropertiesAutoConfiguration {
@Bean @Bean
@ConditionalOnMissingBean @ConditionalOnMissingBean
public RouterProperties routerProperties() { public RoutingProperties routingProperties() {
return new RouterProperties(); return new RoutingProperties();
} }
@Bean @Bean

@ -14,13 +14,13 @@
* limitations under the License. * limitations under the License.
*/ */
package com.alibaba.cloud.router.feign; package com.alibaba.cloud.routing.feign;
import java.util.Enumeration; import java.util.Enumeration;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import com.alibaba.cloud.router.util.RequestContext; import com.alibaba.cloud.routing.util.RequestContext;
import feign.RequestInterceptor; import feign.RequestInterceptor;
import feign.RequestTemplate; import feign.RequestTemplate;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -30,9 +30,10 @@ import org.slf4j.LoggerFactory;
* @author HH * @author HH
* @since 2.2.10-RC1 * @since 2.2.10-RC1
*/ */
public class FeignInterceptor implements RequestInterceptor { public class RoutingFeignInterceptor implements RequestInterceptor {
private static final Logger LOG = LoggerFactory.getLogger(FeignInterceptor.class); private static final Logger LOG = LoggerFactory
.getLogger(RoutingFeignInterceptor.class);
@Override @Override
public void apply(RequestTemplate requestTemplate) { public void apply(RequestTemplate requestTemplate) {

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package com.alibaba.cloud.router.feign; package com.alibaba.cloud.routing.feign;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
@ -25,12 +25,12 @@ import org.springframework.context.annotation.Configuration;
* @since 2.2.10-RC1 * @since 2.2.10-RC1
*/ */
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
public class FeignInterceptorAutoConfiguration { public class RoutingFeignInterceptorAutoConfiguration {
@Bean @Bean
@ConditionalOnMissingBean @ConditionalOnMissingBean
public FeignInterceptor feignInterceptor() { public RoutingFeignInterceptor routingFeignInterceptor() {
return new FeignInterceptor(); return new RoutingFeignInterceptor();
} }
} }

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package com.alibaba.cloud.router.listener; package com.alibaba.cloud.routing.listener;
import java.util.Collection; import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
@ -22,9 +22,9 @@ import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.alibaba.cloud.commons.governance.event.RoutingDataChangedEvent; import com.alibaba.cloud.commons.governance.event.RoutingDataChangedEvent;
import com.alibaba.cloud.commons.governance.labelrouting.UnifiedRouteDataStructure; import com.alibaba.cloud.commons.governance.routing.UnifiedRoutingDataStructure;
import com.alibaba.cloud.router.repository.FilterService; import com.alibaba.cloud.routing.repository.FilterService;
import com.alibaba.cloud.router.repository.RouteDataRepository; import com.alibaba.cloud.routing.repository.RoutingDataRepository;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -35,39 +35,37 @@ import org.springframework.context.ApplicationListener;
* @author <a href="liuziming@buaa.edu.cn"></a> * @author <a href="liuziming@buaa.edu.cn"></a>
* @since 2.2.10-RC1 * @since 2.2.10-RC1
*/ */
public class LabelRouteDataListener public class RoutingDataListener implements ApplicationListener<RoutingDataChangedEvent> {
implements ApplicationListener<RoutingDataChangedEvent> {
private static final Logger log = LoggerFactory private static final Logger log = LoggerFactory.getLogger(RoutingDataListener.class);
.getLogger(LabelRouteDataListener.class);
private RouteDataRepository routeDataRepository; private RoutingDataRepository routingDataRepository;
private FilterService filterService; private FilterService filterService;
public LabelRouteDataListener(RouteDataRepository routeDataRepository, public RoutingDataListener(RoutingDataRepository routeDataRepository,
FilterService filterService) { FilterService filterService) {
this.routeDataRepository = routeDataRepository; this.routingDataRepository = routeDataRepository;
this.filterService = filterService; this.filterService = filterService;
} }
@Override @Override
public void onApplicationEvent(RoutingDataChangedEvent event) { public void onApplicationEvent(RoutingDataChangedEvent event) {
try { try {
Collection<UnifiedRouteDataStructure> untiedRouterDataStructureList = event Collection<UnifiedRoutingDataStructure> unifiedRoutingDataStructureList = event
.getUntiedRouterDataStructureList(); .getUntiedRouterDataStructureList();
// Filter service. // Filter service.
// todo can cache the result // todo can cache the result
HashSet<String> definitionFeignService = filterService HashSet<String> definitionFeignService = filterService
.getDefinitionFeignService(untiedRouterDataStructureList.size()); .getDefinitionFeignService(unifiedRoutingDataStructureList.size());
List<UnifiedRouteDataStructure> routeDatalist = untiedRouterDataStructureList List<UnifiedRoutingDataStructure> routeDatalist = unifiedRoutingDataStructureList
.stream() .stream()
.filter(unifiedRouteDataStructure -> definitionFeignService .filter(unifiedRouteDataStructure -> definitionFeignService
.contains(unifiedRouteDataStructure.getTargetService())) .contains(unifiedRouteDataStructure.getTargetService()))
.collect(Collectors.toList()); .collect(Collectors.toList());
routeDataRepository.updateRouteData(routeDatalist); routingDataRepository.updateRouteData(routeDatalist);
} }
catch (Exception e) { catch (Exception e) {
log.error("Failed to update route data", e); log.error("Failed to update route data", e);

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package com.alibaba.cloud.router.publish; package com.alibaba.cloud.routing.publish;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package com.alibaba.cloud.router.repository; package com.alibaba.cloud.routing.repository;
import java.util.HashSet; import java.util.HashSet;

@ -14,17 +14,17 @@
* limitations under the License. * limitations under the License.
*/ */
package com.alibaba.cloud.router.repository; package com.alibaba.cloud.routing.repository;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import com.alibaba.cloud.commons.governance.labelrouting.LabelRouteRule; import com.alibaba.cloud.commons.governance.routing.MatchService;
import com.alibaba.cloud.commons.governance.labelrouting.MatchService; import com.alibaba.cloud.commons.governance.routing.RoutingRule;
import com.alibaba.cloud.commons.governance.labelrouting.UnifiedRouteDataStructure; import com.alibaba.cloud.commons.governance.routing.UnifiedRoutingDataStructure;
import com.alibaba.cloud.commons.governance.labelrouting.rule.RouteRule; import com.alibaba.cloud.commons.governance.routing.rule.Rule;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -34,12 +34,13 @@ import org.springframework.util.CollectionUtils;
* @author HH * @author HH
* @since 2.2.10-RC1 * @since 2.2.10-RC1
*/ */
public class RouteDataRepository { public class RoutingDataRepository {
private static final Logger LOG = LoggerFactory.getLogger(RouteDataRepository.class); private static final Logger LOG = LoggerFactory
.getLogger(RoutingDataRepository.class);
/** /**
* Key is service name,value is hashmap,which key is single RouteRule key,value is * Key is service name,value is hashmap,which key is single RoutingRule key,value is
* match service. Use double hash index to parse route rule. * match service. Use double hash index to parse route rule.
*/ */
private ConcurrentHashMap<String, HashMap<String, List<MatchService>>> routeCache = new ConcurrentHashMap<>(); private ConcurrentHashMap<String, HashMap<String, List<MatchService>>> routeCache = new ConcurrentHashMap<>();
@ -47,7 +48,7 @@ public class RouteDataRepository {
/** /**
* The default version of each service. * The default version of each service.
*/ */
private ConcurrentHashMap<String, String> defaultRouteVersion = new ConcurrentHashMap<>(); private ConcurrentHashMap<String, String> defaultRoutingVersion = new ConcurrentHashMap<>();
/** /**
* Sign of path. * Sign of path.
@ -74,13 +75,13 @@ public class RouteDataRepository {
*/ */
public static final int MIN_WEIGHT = 0; public static final int MIN_WEIGHT = 0;
public void updateRouteData(final List<UnifiedRouteDataStructure> routeDataList) { public void updateRouteData(final List<UnifiedRoutingDataStructure> routeDataList) {
ConcurrentHashMap<String, HashMap<String, List<MatchService>>> newRouteCache = new ConcurrentHashMap<>(); ConcurrentHashMap<String, HashMap<String, List<MatchService>>> newRouteCache = new ConcurrentHashMap<>();
ConcurrentHashMap<String, List<MatchService>> newPathRuleMap = new ConcurrentHashMap<>(); ConcurrentHashMap<String, List<MatchService>> newPathRuleMap = new ConcurrentHashMap<>();
for (UnifiedRouteDataStructure routeData : routeDataList) { for (UnifiedRoutingDataStructure routeData : routeDataList) {
nonNullCheck(routeData); nonNullCheck(routeData);
buildHashIndex(routeData, newRouteCache, newPathRuleMap); buildHashIndex(routeData, newRouteCache, newPathRuleMap);
defaultRouteVersion.put(routeData.getTargetService(), defaultRoutingVersion.put(routeData.getTargetService(),
routeData.getLabelRouteRule().getDefaultRouteVersion()); routeData.getLabelRouteRule().getDefaultRouteVersion());
} }
// Replace it atomically // Replace it atomically
@ -88,16 +89,16 @@ public class RouteDataRepository {
this.pathRuleMap = newPathRuleMap; this.pathRuleMap = newPathRuleMap;
} }
private void nonNullCheck(UnifiedRouteDataStructure unifiedRouteDataStructure) { private void nonNullCheck(UnifiedRoutingDataStructure unifiedRoutingDataStructure) {
String targetService = unifiedRouteDataStructure.getTargetService(); String targetService = unifiedRoutingDataStructure.getTargetService();
if (targetService == null) { if (targetService == null) {
LOG.error("Lose target Service name."); LOG.error("Lose target Service name.");
} }
final LabelRouteRule labelRouteData = unifiedRouteDataStructure final RoutingRule labelRouteData = unifiedRoutingDataStructure
.getLabelRouteRule(); .getLabelRouteRule();
final List<MatchService> matchServiceList = labelRouteData.getMatchRouteList(); final List<MatchService> matchServiceList = labelRouteData.getMatchRouteList();
for (MatchService matchService : matchServiceList) { for (MatchService matchService : matchServiceList) {
final List<RouteRule> ruleList = matchService.getRuleList(); final List<Rule> ruleList = matchService.getRuleList();
String version = matchService.getVersion(); String version = matchService.getVersion();
Integer weight = matchService.getWeight(); Integer weight = matchService.getWeight();
if (CollectionUtils.isEmpty(ruleList)) { if (CollectionUtils.isEmpty(ruleList)) {
@ -118,7 +119,7 @@ public class RouteDataRepository {
} }
} }
private void buildHashIndex(final UnifiedRouteDataStructure routerData, private void buildHashIndex(final UnifiedRoutingDataStructure routerData,
ConcurrentHashMap<String, HashMap<String, List<MatchService>>> newRouteCache, ConcurrentHashMap<String, HashMap<String, List<MatchService>>> newRouteCache,
ConcurrentHashMap<String, List<MatchService>> newPathRuleMap) { ConcurrentHashMap<String, List<MatchService>> newPathRuleMap) {
final List<MatchService> matchRouteList = routerData.getLabelRouteRule() final List<MatchService> matchRouteList = routerData.getLabelRouteRule()
@ -126,7 +127,7 @@ public class RouteDataRepository {
HashMap<String, List<MatchService>> singleRuleMap = new HashMap<>(); HashMap<String, List<MatchService>> singleRuleMap = new HashMap<>();
for (MatchService matchService : matchRouteList) { for (MatchService matchService : matchRouteList) {
List<RouteRule> ruleList = matchService.getRuleList(); List<Rule> ruleList = matchService.getRuleList();
// Take out the path label separately, because there is no key for hash index. // Take out the path label separately, because there is no key for hash index.
if (ruleList.size() == 1 if (ruleList.size() == 1
@ -140,7 +141,7 @@ public class RouteDataRepository {
newPathRuleMap.put(routerData.getTargetService(), matchServiceList); newPathRuleMap.put(routerData.getTargetService(), matchServiceList);
continue; continue;
} }
for (RouteRule routeRule : ruleList) { for (Rule routeRule : ruleList) {
List<MatchService> matchServiceList = singleRuleMap List<MatchService> matchServiceList = singleRuleMap
.get(routeRule.getKey()); .get(routeRule.getKey());
if (matchServiceList == null) { if (matchServiceList == null) {
@ -160,7 +161,7 @@ public class RouteDataRepository {
} }
public String getDefaultRouteVersion(String targetService) { public String getDefaultRouteVersion(String targetService) {
return defaultRouteVersion.get(targetService); return defaultRoutingVersion.get(targetService);
} }
public List<MatchService> getPathRules(String targetService) { public List<MatchService> getPathRules(String targetService) {

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package com.alibaba.cloud.router.ribbon; package com.alibaba.cloud.routing.ribbon;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@ -27,17 +27,17 @@ import java.util.concurrent.ThreadLocalRandom;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import com.alibaba.cloud.commons.governance.labelrouting.MatchService; import com.alibaba.cloud.commons.governance.routing.MatchService;
import com.alibaba.cloud.commons.governance.labelrouting.rule.RouteRule; import com.alibaba.cloud.commons.governance.routing.rule.Rule;
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.ribbon.NacosServer; import com.alibaba.cloud.nacos.ribbon.NacosServer;
import com.alibaba.cloud.router.RouterProperties; import com.alibaba.cloud.routing.RoutingProperties;
import com.alibaba.cloud.router.publish.TargetServiceChangedPublisher; import com.alibaba.cloud.routing.publish.TargetServiceChangedPublisher;
import com.alibaba.cloud.router.repository.RouteDataRepository; import com.alibaba.cloud.routing.repository.RoutingDataRepository;
import com.alibaba.cloud.router.util.ConditionMatchUtil; import com.alibaba.cloud.routing.util.ConditionMatchUtil;
import com.alibaba.cloud.router.util.LoadBalanceUtil; import com.alibaba.cloud.routing.util.LoadBalanceUtil;
import com.alibaba.cloud.router.util.RequestContext; import com.alibaba.cloud.routing.util.RequestContext;
import com.alibaba.nacos.api.naming.NamingService; 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.netflix.loadbalancer.AbstractServerPredicate; import com.netflix.loadbalancer.AbstractServerPredicate;
@ -54,9 +54,10 @@ import org.springframework.util.CollectionUtils;
* @author HH * @author HH
* @since 2.2.10-RC1 * @since 2.2.10-RC1
*/ */
public class LabelRouteLBRule extends PredicateBasedRule { public class RoutingLoadBalanceRule extends PredicateBasedRule {
private static final Logger LOG = LoggerFactory.getLogger(LabelRouteLBRule.class); private static final Logger LOG = LoggerFactory
.getLogger(RoutingLoadBalanceRule.class);
/** /**
* Support Parsing Rules from path,only URI at present. * Support Parsing Rules from path,only URI at present.
@ -110,10 +111,10 @@ public class LabelRouteLBRule extends PredicateBasedRule {
private NacosServiceManager nacosServiceManager; private NacosServiceManager nacosServiceManager;
@Autowired @Autowired
private RouteDataRepository routeDataRepository; private RoutingDataRepository routingDataRepository;
@Autowired @Autowired
private RouterProperties routerProperties; private RoutingProperties routingProperties;
@Autowired @Autowired
private TargetServiceChangedPublisher targetServiceChangedPublisher; private TargetServiceChangedPublisher targetServiceChangedPublisher;
@ -126,11 +127,11 @@ public class LabelRouteLBRule extends PredicateBasedRule {
targetServiceChangedPublisher.addTargetService(targetServiceName); targetServiceChangedPublisher.addTargetService(targetServiceName);
// If routeData isn't present, use normal load balance rule. // If routeData isn't present, use normal load balance rule.
final HashMap<String, List<MatchService>> routeData = routeDataRepository final HashMap<String, List<MatchService>> routeData = routingDataRepository
.getRouteRule(targetServiceName); .getRouteRule(targetServiceName);
if (routeData == null) { if (routeData == null) {
return loadBalanceUtil.loadBalanceByOrdinaryRule(loadBalancer, key, return loadBalanceUtil.loadBalanceByOrdinaryRule(loadBalancer, key,
routerProperties.getRule()); routingProperties.getRule());
} }
// Get instances from register-center. // Get instances from register-center.
@ -214,7 +215,7 @@ public class LabelRouteLBRule extends PredicateBasedRule {
} }
} }
final Map<String, String[]> parameterMap = request.getParameterMap(); final Map<String, String[]> parameterMap = request.getParameterMap();
int defaultVersionWeight = RouteDataRepository.SUM_WEIGHT; int defaultVersionWeight = RoutingDataRepository.SUM_WEIGHT;
boolean isMatch = false; boolean isMatch = false;
// Parse rule. // Parse rule.
@ -244,7 +245,7 @@ public class LabelRouteLBRule extends PredicateBasedRule {
} }
} }
final List<MatchService> pathRules = routeDataRepository final List<MatchService> pathRules = routingDataRepository
.getPathRules(targetServiceName); .getPathRules(targetServiceName);
if (!isMatch && pathRules != null) { if (!isMatch && pathRules != null) {
for (MatchService matchService : pathRules) { for (MatchService matchService : pathRules) {
@ -260,8 +261,8 @@ public class LabelRouteLBRule extends PredicateBasedRule {
} }
// Add default route // Add default route
if (defaultVersionWeight > RouteDataRepository.MIN_WEIGHT) { if (defaultVersionWeight > RoutingDataRepository.MIN_WEIGHT) {
String defaultRouteVersion = routeDataRepository String defaultRouteVersion = routingDataRepository
.getDefaultRouteVersion(targetServiceName); .getDefaultRouteVersion(targetServiceName);
versionSet.add(defaultRouteVersion); versionSet.add(defaultRouteVersion);
weightMap.put(defaultRouteVersion, defaultVersionWeight); weightMap.put(defaultRouteVersion, defaultVersionWeight);
@ -275,18 +276,18 @@ public class LabelRouteLBRule extends PredicateBasedRule {
HashSet<String> versionSet, HashMap<String, Integer> weightMap, HashSet<String> versionSet, HashMap<String, Integer> weightMap,
HashSet<String> fallbackVersionSet, HashSet<String> fallbackVersionSet,
HashMap<String, Integer> fallbackWeightMap) { HashMap<String, Integer> fallbackWeightMap) {
final List<MatchService> matchServiceList = routeDataRepository final List<MatchService> matchServiceList = routingDataRepository
.getRouteRule(targetServiceName).get(keyName); .getRouteRule(targetServiceName).get(keyName);
if (matchServiceList == null) { if (matchServiceList == null) {
return NO_MATCH; return NO_MATCH;
} }
for (MatchService matchService : matchServiceList) { for (MatchService matchService : matchServiceList) {
final List<RouteRule> ruleList = matchService.getRuleList(); final List<Rule> ruleList = matchService.getRuleList();
String version = matchService.getVersion(); String version = matchService.getVersion();
Integer weight = matchService.getWeight(); Integer weight = matchService.getWeight();
String fallback = matchService.getFallback(); String fallback = matchService.getFallback();
boolean isMatchRule = true; boolean isMatchRule = true;
for (RouteRule routeRule : ruleList) { for (Rule routeRule : ruleList) {
String type = routeRule.getType(); String type = routeRule.getType();
switch (type) { switch (type) {
case PATH: case PATH:
@ -318,7 +319,7 @@ public class LabelRouteLBRule extends PredicateBasedRule {
return NO_MATCH; return NO_MATCH;
} }
private boolean parseRequestPath(final RouteRule routeRule, private boolean parseRequestPath(final Rule routeRule,
final HttpServletRequest request) { final HttpServletRequest request) {
String condition = routeRule.getCondition(); String condition = routeRule.getCondition();
String value = routeRule.getValue(); String value = routeRule.getValue();
@ -326,7 +327,7 @@ public class LabelRouteLBRule extends PredicateBasedRule {
return conditionMatch(condition, value, uri); return conditionMatch(condition, value, uri);
} }
private boolean parseRequestHeader(final RouteRule routeRule, private boolean parseRequestHeader(final Rule routeRule,
final HashMap<String, String> requestHeaders) { final HashMap<String, String> requestHeaders) {
if (requestHeaders.size() == 0) { if (requestHeaders.size() == 0) {
return false; return false;
@ -337,7 +338,7 @@ public class LabelRouteLBRule extends PredicateBasedRule {
return conditionMatch(condition, value, headerValue); return conditionMatch(condition, value, headerValue);
} }
private boolean parseRequestParameter(final RouteRule routeRule, private boolean parseRequestParameter(final Rule routeRule,
final Map<String, String[]> parameterMap) { final Map<String, String[]> parameterMap) {
if (parameterMap == null || parameterMap.size() == 0) { if (parameterMap == null || parameterMap.size() == 0) {
return false; return false;
@ -389,12 +390,12 @@ public class LabelRouteLBRule extends PredicateBasedRule {
} }
} }
if (sum > RouteDataRepository.SUM_WEIGHT) { if (sum > RoutingDataRepository.SUM_WEIGHT) {
LOG.error("Sum of weight has over {} ", RouteDataRepository.SUM_WEIGHT); LOG.error("Sum of weight has over {} ", RoutingDataRepository.SUM_WEIGHT);
} }
double random = ThreadLocalRandom.current().nextDouble( double random = ThreadLocalRandom.current().nextDouble(
RouteDataRepository.MIN_WEIGHT, RouteDataRepository.SUM_WEIGHT); RoutingDataRepository.MIN_WEIGHT, RoutingDataRepository.SUM_WEIGHT);
int chooseServiceIndex = Arrays.binarySearch(weightArray, random); int chooseServiceIndex = Arrays.binarySearch(weightArray, random);
if (chooseServiceIndex < 0) { if (chooseServiceIndex < 0) {
chooseServiceIndex = -chooseServiceIndex - 1; chooseServiceIndex = -chooseServiceIndex - 1;

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package com.alibaba.cloud.router.ribbon; package com.alibaba.cloud.routing.ribbon;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
@ -25,12 +25,12 @@ import org.springframework.context.annotation.Configuration;
* @since 2.2.10-RC1 * @since 2.2.10-RC1
*/ */
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
public class LabelRouteLBRuleAutoConfiguration { public class RoutingLoadBalanceRuleAutoConfiguration {
@Bean @Bean
@ConditionalOnMissingBean @ConditionalOnMissingBean
public LabelRouteLBRule labelRouteRule() { public RoutingLoadBalanceRule routingLoadBalanceRule() {
return new LabelRouteLBRule(); return new RoutingLoadBalanceRule();
} }
} }

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package com.alibaba.cloud.router.util; package com.alibaba.cloud.routing.util;
import java.util.regex.Pattern; import java.util.regex.Pattern;

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package com.alibaba.cloud.router.util; package com.alibaba.cloud.routing.util;
import com.netflix.loadbalancer.AvailabilityFilteringRule; import com.netflix.loadbalancer.AvailabilityFilteringRule;
import com.netflix.loadbalancer.BestAvailableRule; import com.netflix.loadbalancer.BestAvailableRule;

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package com.alibaba.cloud.router.util; package com.alibaba.cloud.routing.util;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package com.alibaba.cloud.router.web; package com.alibaba.cloud.routing.web;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package com.alibaba.cloud.router.web; package com.alibaba.cloud.routing.web;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry;

@ -14,12 +14,12 @@
* limitations under the License. * limitations under the License.
*/ */
package com.alibaba.cloud.router.web; package com.alibaba.cloud.routing.web;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.alibaba.cloud.router.util.RequestContext; import com.alibaba.cloud.routing.util.RequestContext;
import org.springframework.lang.Nullable; import org.springframework.lang.Nullable;
import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.HandlerInterceptor;

@ -1,6 +1,6 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.alibaba.cloud.router.LabelRoutingAutoConfiguration,\ com.alibaba.cloud.routing.RoutingAutoConfiguration,\
com.alibaba.cloud.router.feign.FeignInterceptorAutoConfiguration,\ com.alibaba.cloud.routing.feign.RoutingFeignInterceptorAutoConfiguration,\
com.alibaba.cloud.router.ribbon.LabelRouteLBRuleAutoConfiguration,\ com.alibaba.cloud.routing.ribbon.RoutingLoadBalanceRuleAutoConfiguration,\
com.alibaba.cloud.router.web.WebMvcAutoConfiguration,\ com.alibaba.cloud.routing.web.WebMvcAutoConfiguration,\
com.alibaba.cloud.router.RouterPropertiesAutoConfiguration com.alibaba.cloud.routing.RoutingPropertiesAutoConfiguration

Loading…
Cancel
Save