Spring Cloud Zuul是基于Netflix Zuul的封装,实现路由和统一校验、认证和授权等过滤处理,同时基于Ribbon实现负载均衡,基于hystrix实现断路器,适用于构建API网关。
1 |
|
zuul依赖了hystrix、ribbon和actuator
1 |
|
新增/routes端点
路由
path到url或serviceId的映射,path支持Ant语法匹配
传统路由方式
不基于注册中心
单实例配置
1 |
|
多实例配置
1 |
|
面向服务的路由
基于注册中心(需要依赖eureka)
1 |
|
1 |
|
默认路由
serviceId作为route和path,自动映射,不需要人工维护。
可以设置不自动映射的规则匹配
1 |
|
1 |
|
自定义路由
PatternServiceRouteMapper
1 |
|
动态路由
基于Spring Cloud Config实现动态配置,包括路由映射等
1 |
|
Zuul基于路由顺序匹配,而不是最有匹配
过滤器
FilterProcessor
请求生命周期
- pre
- route
- post
- error
filterType
filterOrder
数字越小优先级越高
shouldFilter
是否需要过滤
run
1 |
|
核心过滤器
Pre过滤器
route过滤器
post过滤器
SendErrorFilter
error.status_code:错误编码
error.message:错误描述
error.exception:异常对象
error过滤器
自定义ErrorFilter,用来处理没有处理的异常
自定义ErrorExtFilter,继承SendErrorFilter,用来处理post过滤器抛出的异常和响应(由于post过滤器抛出的异常不会再转给post过滤器,参见ZuulServlet
)
异常信息
DefaultErrorAttributes
配置
1 |
|
动态过滤器
Cookie和头信息
默认会过滤掉敏感头信息(Cookie,Set-Cookie,Authorization),可以自定义
1 |
|
高可用
zuul作为微服务,可以部署多个,内部请求可以基于服务注册和发布中心实现多活,但是外部一般需要在zuul前面增加负载均衡设施,比如nginx、F5等。