1.请求刚到来时 前置过滤器 可实现自定义 2. 转发过滤器 根据路由规则转发给对应微服 微服响应再返回 可进行一些处理
3.后置过滤器 在转发过滤器之后 在返回浏览器前处理
4.错误过滤器 以上过滤器出错后都到这里 处理后给 没有报错的后置fillter
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-zuul</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId> apache的工具包</dependency>
模拟过滤器
@Component
public class LoginFilter extends ZuulFilter {@Overridepublic String filterType() {return FilterConstants.PRE_TYPE; 表明为前置 过滤器}@Overridepublic int filterOrder() {return FilterConstants.PRE_DECORATION_FILTER_ORDER-1; 表明在处理请求头之前 ,越小优先级越高}@Overridepublic boolean shouldFilter() {return true; 启用这个过滤器}@Overridepublic Object run() throws ZuulException {com.netflix.zuul.context.RequestContext ctx = RequestContext.getCurrentContext();HttpServletRequest request = ctx.getRequest();String flag = request.getParameter("flag"); 参数必须有flagif (StringUtils.isBlank(flag)){ 为空拦截ctx.setSendZuulResponse(false);ctx.setResponseStatusCode(HttpStatus.FORBIDDEN.value());}return null;}
}
http://localhost:10010/user/1?flag= 拦截 http://localhost:10010/user/1?flag=1成功访问
Zuul 的 超时配置
hystrix:command:default:execution:isolation:thread:timeoutInMilliseconds: 4000
ribbon:ConnectiontimeOut: 500ReadtimeOut: 3000
与消费者一样 单 Zuul 的hystrix默认是开启的
Zuul 的高可用
配置Zuul集群,一个服务多个实例 , 使用nginx 作为第一层网关,达到反向代理 与负载均衡
Zuul 总配置文件 congfig-server 与git 结合 使用消息总线 配置 配置更新时,各个微服 自动更新配置 且不用重启