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 {
@Override
public String filterType() {
return FilterConstants.PRE_TYPE; 表明为前置 过滤器
}
@Override
public int filterOrder() {
return FilterConstants.PRE_DECORATION_FILTER_ORDER-1; 表明在处理请求头之前 ,越小优先级越高
}
@Override
public boolean shouldFilter() {
return true; 启用这个过滤器
}
@Override
public Object run() throws ZuulException {
com.netflix.zuul.context.RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
String flag = request.getParameter("flag"); 参数必须有flag
if (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: 500
ReadtimeOut: 3000
与消费者一样 单 Zuul 的hystrix默认是开启的
Zuul 的高可用
配置Zuul集群,一个服务多个实例 , 使用nginx 作为第一层网关,达到反向代理 与负载均衡
Zuul 总配置文件 congfig-server 与git 结合 使用消息总线 配置 配置更新时,各个微服 自动更新配置 且不用重启