Gateway网关(九)
1 网关作用介绍
1.1 为什么需要网关
网关功能:
- 对用户请求做身份认证、权限校验;
- 将用户请求路由到微服务,并实现负载均衡;
- 对用户请求做限流。
1.2 网关的技术实现
在SpringCloud中网关的实现包括两种:
- gateway;
- zuul
Zuul是基于Servlet的实现,属于阻塞式编程。而SpringCloudGateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能。
2 快速入门
2.1 搭建网关服务(是个独立的微服务)
搭建网关服务的步骤:
1. 创建新的module,引入SpringCloudGateway的依赖和nacos的服务发现依赖;
2.编写路由配置及nacos地址;
lb:LoadBalance;
总:
网关搭建步骤:
- 创建项目,引入nacos服务发现和gateway依赖;
- 配置application.yml,包括服务基本信息、nacos地址、路由
路由配置包括:
- 路由id:路由的唯一标识;
- 路由目标(uri):路由的目标地址,http代表固定地址,lb代表根据服务名负载均衡;
- 路由断言(predicates):判断路由的规则;
- 路由过滤器(filters):对请求或响应做处理。
3 路由断言工厂
3.1 路由断言工厂Route Predicate Factory
网关路由可以配置的内容包括:
- 路由id:路由唯一标示;
- uri:路由目的地,支持lb 和 http两种;
- predicates:路由断言,判断请求是否符合要求,符合则转发到路由目的地;
- filters:路由过滤器,处理请求或响应。
路由断言工厂的作用(解析):
- 我们在配置文件中写的断言规则只是字符串,这些字符串会被Predicate Factory读取并处理,转变为路由判断的条件;
- 例如Path=/user/**是按照路径匹配,这个规则是由org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory类来处理的;
- 像这样的断言工厂在SpringCloudGateway还有十几个。
- 总:路由断言工厂的作用是读取路由的判断规则,而后把它解析成对应的判断条件,等请求进来做判断。
Spring提供了11中基本的Predicate工厂:
4 路由的过滤器配置
4.1 路由过滤器 GatewayFilter
GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理。
4.2 过滤器工厂 GatewayFilterFactory
Spring提供了31种不同的路由过滤器工厂。例如:
- 过滤器的作用:
- 对路由的请求或响应做加工处理,比如添加请求头;
- 配置在路由下的过滤器只对当前路由的请求生效;
- defaultFilters的作用:对所有路由都生效的过滤器
5 全局过滤器 GlobalFilter
全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用一样;
区别在于GatewayFilter通过配置定义,处理逻辑是固定的。而GlobalFilter的逻辑需要自己写代码实现。
定义方式是实现GlobalFilter接口;
总:
- 全局过滤器的作用:对所有路由都生效的过滤器,并且可以自定义处理逻辑;
- 实现全局过滤器的步骤:
- 实现GlobaFilter接口;
- 添加@Order注解或实现Ordered接口;
- 编写处理逻辑。
6 过滤器执行顺序
请求进入网关会碰到三类过滤器:当前路由的过滤器、DefaultFilter、GlobalFilter
请求路由后,会将当前路由过滤器和DefaultFilter、GlobalFilter,合并到一个过滤器链(集合)中,排序后依次执行每个过滤器。
- 路由过滤器、DefaultFilter、全局过滤器的执行顺序:
- order值越小,优先级越高;
- 当order值一样时,顺序是DefaultFilter最先,然后是局部的路由过滤器,最后是全局过滤器。
7 网关的cors跨域配置
7.1 跨域问题处理
跨域:域名不一致就是跨域,主要包括:
- 域名不同:www.taobao.com 和 www.taobao.org 和 www.jd.com 和 miaosha.jd.com;
- 域名相同,端口不同:localhost:8080 和 localhost:8081
跨域问题:浏览器禁止请求的发起者与服务端发生跨域ajax请求,请求被浏览器拦截的问题。
解决方案:CORS
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?