Change type of ServiceConfig.path2methodToApiConfigMapMap to Map<String, Map<Object, GatewayGroup2apiConfig>> #189

This commit is contained in:
hongqiaowei
2021-05-14 14:10:22 +08:00
parent 766acfeeaa
commit 066e986b22
2 changed files with 35 additions and 43 deletions

View File

@@ -52,6 +52,8 @@ public class ApiConfig {
public static final char FORBID = 'f';
public static final String ALL_METHOD = "AM";
private static final String match_all = "/**";
private static final int ENABLE = 1;
@@ -68,7 +70,10 @@ public class ApiConfig {
public String backendService;
public HttpMethod method = HttpMethod.TRACE;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
public HttpMethod method;
public Object fizzMethod = ALL_METHOD;
public String path = match_all;
@@ -76,8 +81,6 @@ public class ApiConfig {
public String backendPath;
// public Set<String> apps = Stream.of(App.ALL_APP).collect(Collectors.toSet());
@JsonProperty("proxyMode")
public byte type = Type.SERVICE_DISCOVERY;
@@ -124,19 +127,6 @@ public class ApiConfig {
}
}
// public void setApp(String as) {
// apps.remove(App.ALL_APP);
// if (StringUtils.isBlank(as)) {
// apps.add("*");
// } else {
// Arrays.stream(StringUtils.split(as, ',')).forEach(
// a -> {
// apps.add(a.trim());
// }
// );
// }
// }
public void setPath(String p) {
if (StringUtils.isNotBlank(p)) {
if ("/".equals(p)) {
@@ -155,7 +145,9 @@ public class ApiConfig {
public void setMethod(String m) {
method = HttpMethod.resolve(m);
if (method == null) {
method = HttpMethod.TRACE;
fizzMethod = ALL_METHOD;
} else {
fizzMethod = method;
}
}

View File

@@ -41,9 +41,9 @@ public class ServiceConfig {
public String id;
@JsonIgnore
public Map<Integer, ApiConfig> apiConfigMap = new HashMap<>(32);
public Map<Integer, ApiConfig> apiConfigMap = new HashMap<>();
public Map<String, EnumMap<HttpMethod, GatewayGroup2apiConfig>> path2methodToApiConfigMapMap = new HashMap<>(6);
public Map<String, Map<Object, GatewayGroup2apiConfig>> path2methodToApiConfigMapMap = new HashMap<>();
public ServiceConfig(String id) {
this.id = id;
@@ -51,18 +51,18 @@ public class ServiceConfig {
public void add(ApiConfig ac) {
apiConfigMap.put(ac.id, ac);
EnumMap<HttpMethod, GatewayGroup2apiConfig> method2apiConfigMap = path2methodToApiConfigMapMap.get(ac.path);
Map<Object, GatewayGroup2apiConfig> method2apiConfigMap = path2methodToApiConfigMapMap.get(ac.path);
if (method2apiConfigMap == null) {
method2apiConfigMap = new EnumMap<>(HttpMethod.class);
method2apiConfigMap = new HashMap<Object, GatewayGroup2apiConfig>();
GatewayGroup2apiConfig gatewayGroup2apiConfig = new GatewayGroup2apiConfig();
gatewayGroup2apiConfig.add(ac);
method2apiConfigMap.put(ac.method, gatewayGroup2apiConfig);
method2apiConfigMap.put(ac.fizzMethod, gatewayGroup2apiConfig);
path2methodToApiConfigMapMap.put(ac.path, method2apiConfigMap);
} else {
GatewayGroup2apiConfig gatewayGroup2apiConfig = method2apiConfigMap.get(ac.method);
GatewayGroup2apiConfig gatewayGroup2apiConfig = method2apiConfigMap.get(ac.fizzMethod);
if (gatewayGroup2apiConfig == null) {
gatewayGroup2apiConfig = new GatewayGroup2apiConfig();
method2apiConfigMap.put(ac.method, gatewayGroup2apiConfig);
method2apiConfigMap.put(ac.fizzMethod, gatewayGroup2apiConfig);
}
gatewayGroup2apiConfig.add(ac);
}
@@ -71,18 +71,18 @@ public class ServiceConfig {
public void remove(ApiConfig ac) {
ApiConfig remove = apiConfigMap.remove(ac.id);
Map<HttpMethod, GatewayGroup2apiConfig> method2apiConfigMap = path2methodToApiConfigMapMap.get(ac.path);
Map<Object, GatewayGroup2apiConfig> method2apiConfigMap = path2methodToApiConfigMapMap.get(ac.path);
if (method2apiConfigMap == null) {
log.info("no config to delete for " + ac.service + ' ' + ac.path);
} else {
GatewayGroup2apiConfig gatewayGroup2apiConfig = method2apiConfigMap.get(ac.method);
GatewayGroup2apiConfig gatewayGroup2apiConfig = method2apiConfigMap.get(ac.fizzMethod);
if (gatewayGroup2apiConfig == null) {
log.info("no config to delete for " + ac.service + ' ' + ac.method + ' ' + ac.path);
log.info("no config to delete for " + ac.service + ' ' + ac.fizzMethod + ' ' + ac.path);
} else {
log.info(id + " remove " + ac);
gatewayGroup2apiConfig.remove(ac);
if (gatewayGroup2apiConfig.getConfigMap().isEmpty()) {
method2apiConfigMap.remove(ac.method);
method2apiConfigMap.remove(ac.fizzMethod);
if (method2apiConfigMap.isEmpty()) {
path2methodToApiConfigMapMap.remove(ac.path);
}
@@ -94,18 +94,18 @@ public class ServiceConfig {
public void update(ApiConfig ac) {
ApiConfig prev = apiConfigMap.put(ac.id, ac);
log.info(prev + " is updated by " + ac + " in api config map");
EnumMap<HttpMethod, GatewayGroup2apiConfig> method2apiConfigMap = path2methodToApiConfigMapMap.get(ac.path);
Map<Object, GatewayGroup2apiConfig> method2apiConfigMap = path2methodToApiConfigMapMap.get(ac.path);
if (method2apiConfigMap == null) {
method2apiConfigMap = new EnumMap<>(HttpMethod.class);
method2apiConfigMap = new HashMap<Object, GatewayGroup2apiConfig>();
GatewayGroup2apiConfig gatewayGroup2apiConfig = new GatewayGroup2apiConfig();
gatewayGroup2apiConfig.add(ac);
method2apiConfigMap.put(ac.method, gatewayGroup2apiConfig);
method2apiConfigMap.put(ac.fizzMethod, gatewayGroup2apiConfig);
path2methodToApiConfigMapMap.put(ac.path, method2apiConfigMap);
} else {
GatewayGroup2apiConfig gatewayGroup2apiConfig = method2apiConfigMap.get(ac.method);
GatewayGroup2apiConfig gatewayGroup2apiConfig = method2apiConfigMap.get(ac.fizzMethod);
if (gatewayGroup2apiConfig == null) {
gatewayGroup2apiConfig = new GatewayGroup2apiConfig();
method2apiConfigMap.put(ac.method, gatewayGroup2apiConfig);
method2apiConfigMap.put(ac.fizzMethod, gatewayGroup2apiConfig);
gatewayGroup2apiConfig.add(ac);
} else {
log.info(id + " update " + ac);
@@ -119,12 +119,12 @@ public class ServiceConfig {
List<GatewayGroup2apiConfig> matchGatewayGroup2apiConfigs = ThreadContext.getArrayList(gg2acs, GatewayGroup2apiConfig.class);
Set<Map.Entry<String, EnumMap<HttpMethod, GatewayGroup2apiConfig>>> es = path2methodToApiConfigMapMap.entrySet();
for (Map.Entry<String, EnumMap<HttpMethod, GatewayGroup2apiConfig>> e : es) {
EnumMap<HttpMethod, GatewayGroup2apiConfig> method2gatewayGroupToApiConfigMap = e.getValue();
Set<Map.Entry<String, Map<Object, GatewayGroup2apiConfig>>> es = path2methodToApiConfigMapMap.entrySet();
for (Map.Entry<String, Map<Object, GatewayGroup2apiConfig>> e : es) {
Map<Object, GatewayGroup2apiConfig> method2gatewayGroupToApiConfigMap = e.getValue();
GatewayGroup2apiConfig gatewayGroup2apiConfig = method2gatewayGroupToApiConfigMap.get(method);
if (gatewayGroup2apiConfig == null) {
gatewayGroup2apiConfig = method2gatewayGroupToApiConfigMap.get(HttpMethod.TRACE);
gatewayGroup2apiConfig = method2gatewayGroupToApiConfigMap.get(ApiConfig.ALL_METHOD);
}
if (gatewayGroup2apiConfig != null) {
String pathPattern = e.getKey();