数字越小,优先级越高
自定义过滤器
- shouldFilter方法
- 优先级
自定义ZuulFilter:
public class MyFilter extends ZuulFilter {
//判断要不要继续执行;ture为总是要执行
public boolean shouldFilter() {
return true;
}
public Object run() {
System.out.println("执行 MyFilter 过滤器");
return null;
}
@Override
public String filterType() {
return FilterConstants.ROUTE_TYPE;
}
//设置该过滤器的优先级为最优先执行
@Override
public int filterOrder() {
return 1;
}
}
注入到Spring容器
@Configuration
public class FilterConfig {
@Bean
public MyFilter myFilter() {
return new MyFilter();
}
}
过滤器动态加载
引入依赖
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.12</version>
</dependency>
主启动类加入动态扫描配置
@PostConstruct
public void zuulInit() {
FilterLoader.getInstance().setCompiler(new GroovyCompiler());
// 读取配置,获取脚本根目录
String scriptRoot = System.getProperty("zuul.filter.root", "groovy/filters");
// 获取刷新间隔
String refreshInterval = System.getProperty("zuul.filter.refreshInterval", "5");
if (scriptRoot.length() > 0) scriptRoot = scriptRoot + File.separator;
try {
FilterFileManager.setFilenameFilter(new GroovyFileFilter());
//扫描该根目录(scriptRoot)下的pre、route、post的过滤器
FilterFileManager.init(Integer.parseInt(refreshInterval), scriptRoot + "pre",
scriptRoot + "route", scriptRoot + "post");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
新建和主启动类中配一致的动态加载过滤器的目录,如下:
项目全部启动后,动态的忘post\pre\route里面装入基于ZuulFilter的过滤器类,会实现动态加载。
@EnableZuulServer和@EnableZuulProxy区别
经过的过滤器不一样
@EnableZuulServer不具有调用集群能力和简单路由功能
动态路由在配置中心统一管理
配置文件同步
配置动态加载
以上为疯狂SpringCloud微服务架构实战学习笔记
感谢杨恩雄老师:https://my.oschina.net/JavaLaw