当前位置: 代码迷 >> 综合 >> Spring-cloud Zuul 过滤器
  详细解决方案

Spring-cloud Zuul 过滤器

热度:99   发布时间:2023-12-24 03:45:40.0

   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 结合   使用消息总线  配置  配置更新时,各个微服 自动更新配置 且不用重启

 

  相关解决方案