深圳外贸网站建设公司河南网站优化公司哪家好
目录
简介
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/csdnurl: https://www.csdn.net/
转发给自己
由SendForwardFilter实现,url要以forward:开头,表示该请求再次跳转到“/user”
routes:test:path: /test/**url: forward: /user
自定义过滤器
自定义过滤器的使用场景非常广泛,如鉴权、安全认证、灰度发布等场景都可以通过自定义过滤器实现
@Configuration
public class TestFilter extends ZuulFilter {@Overridepublic String filterType() {// 设置过滤类型 FilterConstants.PRE_TYPE FilterConstants.ERROR_TYPE FilterConstants.ROUTE_TYPE FilterConstants.POST_TYPEreturn null;}@Overridepublic int filterOrder() {// 优先级 越小越优先执行return 0;}@Overridepublic boolean shouldFilter() {// 是否需要过滤,true为需要过滤,这里可以加相应的判断条件return false;}@Overridepublic Object run() throws ZuulException {// 具体要实现的业务逻辑return null;}
}