Zuul简介:
Zuul的主要功能是路由转发和过滤器。路由功能是微服务的一部分,比如/api/user转发到到user服务,/api/shop转发到到shop服务。zuul默认和Ribbon结合实现了负载均衡的功能。
zuul有以下功能:
-
-
- Authentication
- Insights
- Stress Testing
- Canary Testing
- Dynamic Routing
- Service Migration
- Load Shedding
- Security
- Static Response handling
- Active/Active traffic management
-
Zuul搭建:
第一步:引入相应的pom
第二步:在启动类上启动zuul
第三步:配置文件配置,向注册中心注册。自身做一个客户端。
第四步:启动测试: 六个服务以此启动,最好先启动服务端,再启动其他客户端
zuul过滤:
zuul主要是路由和过滤,上面已经介绍路由,下面介绍过滤。在过滤中类似servlet的过滤器,拦截器。在修改的时候可以做一些二次开发:
1 package com.huhy.springcloud.filter; 2 3 import com.netflix.zuul.ZuulFilter; 4 import com.netflix.zuul.exception.ZuulException; 5 import org.springframework.stereotype.Component; 6 7 /** 8 * @author : huhy on 2018/9/4. 9 * @Project_name:springcloud_self 10 * @LOCAL:com.huhy.springcloud.filter 11 * @description:{todo} 12 */ 13 @Component 14 public class MyFilter extends ZuulFilter { 15 /** 16 * @author huhy 17 * @ClassName:MyFilter 18 * @date 2018/9/4 13:58 19 * @Description: 返回一个字符串代表过滤器的类型 20 */ 21 @Override 22 public String filterType() { 23 /** 24 * pre: 路由之前 25 * routing:路由之时 26 * post: 路由之后 27 * error: 发送错误调用 28 * */ 29 System.out.println("filterType--------------"); 30 return "pre"; 31 } 32 /** 33 * @author huhy 34 * @ClassName:MyFilter 35 * @date 2018/9/4 13:59 36 * @Description: 过滤顺序 37 */ 38 @Override 39 public int filterOrder() { 40 System.out.println("filterOrder--------------"); 41 return 0; 42 } 43 /** 44 * @author huhy 45 * @ClassName:MyFilter 46 * @date 2018/9/4 13:59 47 * @Description: 这里可以写逻辑判断,是否要过滤,本文true,永远过滤。 48 */ 49 @Override 50 public boolean shouldFilter() { 51 System.out.println("shouldFilter--------------"); 52 return true; 53 } 54 /** 55 * @author huhy 56 * @ClassName:MyFilter 57 * @date 2018/9/4 13:59 58 * @Description:过滤器的具体逻辑。可用很复杂,包括查sql,nosql去判断该请求到底有没有权限访问。 59 */ 60 @Override 61 public Object run() throws ZuulException { 62 System.out.println("run--------------"); 63 return "run"; 64 } 65 }
注意:
1>feign 和 ribbon也是负载,那么和zuul有啥侧重点呢?
ribbon的负载在于相同服务之间的负载,zuul多用于在多个服务之间传递请求。 zuul 多以集群的形式存在。
2> zuul在springcloud充当的角色(借用网上一张图)