什么是Zuul?
Spring Cloud Zuul 是整合Netflix公司的 Zuul开源项目(官方:https://github.com/Netflix/zuul);
Zuul 包含了对请求路由和校验过滤两个最主要的功能:
- 其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础,
- 客户端请求网关/api/product,通过路由转发到 product 服务
- 客户端请求网关/api/order,通过路由转发到 order 服务
- 而过滤功能则负责对请求的处理过程进行干预,是实现请求校验等功能的基础。Zuul和Eureka进行整合,将 Zuul自身注册为Eureka服务治理中的服务,同时从Eureka 中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。
使用方式:
- 新建路由网关模块,启动类添加
@EnableZuulProxy
注解 - yml文件中配置
zuul:
routes:
provider-product: # 路由名称,名称任意,路由名称唯一
path: /product/** # 访问路径
#配置之后访问http://localhost:7001/microservice-product/product/get/1和访问http://localhost:7001/product/get/1相同
serviceId: microservice-product # 指定服务ID,会自动从Eureka中找到此服务的ip和端口
stripPrefix: false # 代理转发时去掉前缀,false:代理转发时不去掉前缀 例如:为true时请求 /product/get/1,代理转发到/get/1
# 如果多个服务需要经过路由,则同povider-product方式继续添加,例如:
#provider-order:
#path: /order/**
#serviceId: microservice-order
#stripPrefix: false
- 自定义过滤器
@Component //一定不要少了
public class LoginFilter extends ZuulFilter {
/**
* 返回值可取:
* - pre:在请求路由之前执行
* - route:在请求路由时调用
* - post:请求路由之后调用, 也就是在route和error过滤器之后调用
* - error:处理请求发生错误时调用
* @return
*/
@Override
public String filterType() {
return "pre"; //
}
@Override
public int filterOrder() {
return 1; //返回值是int,会根据返回值进行定义过滤器的执行顺序,值越小优先级越大
}
@Override
public boolean shouldFilter() {
return true; //当前过滤器是否被执行,true则执行,false不执行
}
//定义 过滤功能
@Override
public Object run() throws ZuulException {
}
}