目录
简介
Zuul中的过滤器
过滤器的执行流程
使用过滤器
route过滤器的默认三种配置
路由到服务
路由到url地址
转发给自己
自定义过滤器
简介
Zuul是Netflix开源的微服务网关,主要功能是路由转发和过滤器,其原理也是一系列filters,这些filters可以帮我们实现以下功能:
- 身份验证和安全性
- 观察和监控
- 动态路由
- 负载均衡
- 静态响应处理
- 路由多样化
Zuul中的过滤器
Zuul一共有四种过滤器,分别是:
pre:在请求被路由之前调用,可利用这种过滤器鉴权。选择微服务,记录日志,限流。
route:在将请求路由到微服务调用,用于构建发送给微服务的请求,并用httpclinet ( 或者ribbon )请求微服务。
post:在调用微服务执行后。可用于添加header,记录日志,将响应发给客户端。
error:在其他阶段发生错误是,走此过滤器。
过滤器的执行流程
使用过滤器
route过滤器的默认三种配置
路由到服务
由RibbonRoutingFilter实现,以下配置表示当匹配到"/test/"路径的请求就转发到test-service服务
zuul:
routes:
test:
path: /test/**
serviceId: test-service
路由到url地址
由SimpleHostRoutingFilter实现,以下配置表示当拦截到"/test/csdn"请求时就转发到csdn去,可以在只知道请求路径不知道服务时使用
zuul:
routes:
test:
path: /test/csdn
url: https://www.csdn.net/
转发给自己
由SendForwardFilter实现,url要以forward:开头,表示该请求再次跳转到“/user”
routes:
test:
path: /test/**
url: forward: /user
自定义过滤器
自定义过滤器的使用场景非常广泛,如鉴权、安全认证、灰度发布等场景都可以通过自定义过滤器实现
@Configuration
public class TestFilter extends ZuulFilter {
@Override
public String filterType() {
// 设置过滤类型 FilterConstants.PRE_TYPE FilterConstants.ERROR_TYPE FilterConstants.ROUTE_TYPE FilterConstants.POST_TYPE
return null;
}
@Override
public int filterOrder() {
// 优先级 越小越优先执行
return 0;
}
@Override
public boolean shouldFilter() {
// 是否需要过滤,true为需要过滤,这里可以加相应的判断条件
return false;
}
@Override
public Object run() throws ZuulException {
// 具体要实现的业务逻辑
return null;
}
}