一:关于动态过滤器
在整个网关系统中,我们看到无论在yml中还是java中配置过滤器,过滤器都是配置死了的。换而言之,当我们需要配置新的过滤规则就要需要重新配置,重启网关服务,这明显是不科学的。我们可以这样考虑如果我们可以动态配置且不需要重启项目就能新增路由规则。
二:动态路由的管理
动态路由的配置是配置在jvm的内存中。我们可以将每次的对外配置暴露并持久化保持,并定时加载持久化中配置的。
三:动态路由的代码管理
动态路由id,跳转url,一组断言和一组过滤器组成。这样上述可以组成一个或者多个实体类。
1.实体配置
package com.zypcy.springcloud.gateway.enetity;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* 断言
* zhuyu 2019-01-17
*/
public class GatewayPredicateDefinition {
//断言对应的Name
private String name;
//配置的断言规则
private Map<String, String> args = new LinkedHashMap<>();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Map<String, String> getArgs() {
return args;
}
public void setArgs(Map<String, String> args) {
this.args = args;
}
}
package com.zypcy.springcloud.gateway.enetity;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* 过滤器模型
* zhuyu 2019-01-17
*/
public class GatewayFilterDefinition {
//Filter Name
private String name;
//对应的路由规则
private Map<String, String> args = new LinkedHashMap<>();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Map<String, String> getArgs() {
return args;
}
public void setArgs(Map<String, String> args) {
this.args = args;
}
}
package com.zypcy.springcloud.gateway.enetity;
import java.util.ArrayList;
import java.util.List;
/**
* 路由模型
* zhuyu 2019-01-17
*/
public class GatewayRouteDefinition {