掌握网关几个重点
微服务中网关都有哪些可以选择?
原始的SpringCloud 体系中最常使用的有 zuul 、Consul 、gateway ,本文主要先复习zuul 都有哪些重点!
zuul 首先是做什么的?
- 负责请求路由和路由过滤功能
负责将外部的请求转发到具体的微服务实例上,对外实现统一标准的入口;服务过滤实现一些验证和服务聚合;
核心原理就是实现了一系列的Filter ,四个重要的元素1
2
3
4
5
6
7
8//路由类型
String filterType();
//filter 顺序 越小优先级越大 默认实现 有 -3
int filterOrder();
//是否应该过滤
boolean shouldFilter();
//过滤的具体方法
Object run();
- filterType
- pre:可以在请求被路由之前调用。
- routing:在路由请求时候被调用。
- post:在 routing 和 error 过滤器之后被调用。
- error:处理请求时发生错误时被调用。
- filterOrder:通过 int 值来定义过滤器的执行顺序,数值越小优先级越高。
- shouldFilter:返回一个 boolean 类型来判断该过滤器是否要执行。我们可以通过此方法来指定过滤器的有效范围。
- run:过滤器的具体逻辑。在该函数中,我们可以实现自定义的过滤逻辑,来确定是否要拦截当前的请求,不对其进行后续的路由,或是在请求路由返回结果之后,对处理结果做一些加工等。
zuul 如何应用?都能扩展什么功能?
- 服务鉴权
- 限流
- 根据业务编写自定义的过滤器实现定制化业务逻辑处理
zuul 都有哪些坑?
zuul eagr-load 模式配置
zuul.ribbon.eager-load.enabled=true
没有单独的参数进行配置,我们可以通过 zuul.ignored-services=* 来忽略所有的默认路由,让所有路由配置均维护在配置文件中,以达到网关启动的时候就默认初始化好各个路由转发的负载均衡对象。
路由匹配规则时候要保证有序性,请采用YAML格式,因为拓展的功能ext 也是在/user-service下,这样会导致匹配顺序问题。
1
2
3
4
5
6
7
8 zuul:
routes:
user-service-ext:
path: /user-service/ext/**
serviceId: user-service-ext
user-service:
path: /user-service/**
serviceId: user-service