若依RuoYi-Cloud代码学习三---ruoyi-gateway扩展gateway⽹关。。。⼀、API ⽹关概述
作为微服务的门⾯,应⽤于服务数量众多、复杂度较⾼、规模⽐较⼤的系统。
优点:
客户端通过 API ⽹关与微服务交互时,客户端只需要知道 API ⽹关地址即可,⽽不需要维护⼤量的服务地址,简化了客户端的开发。
客户端直接与 API ⽹关通信,能够减少客户端与各个服务的交互次数。
客户端与后端的服务耦合度降低。
节省流量,提⾼性能,提升⽤户体验。
API ⽹关还提供了安全、流控、过滤、缓存、计费以及监控等 API 管理功能。
常见API ⽹关实现⽅案
Spring Cloud Gateway
Spring Cloud Netflix Zuul
Kong
Nginx+Lua
Traefik
⼆、Spring Cloud Gateway
1、核⼼概念
核⼼概念描述
Route(路
由)
⽹关最基本的模块。它由⼀个 ID、⼀个⽬标 URI、⼀组断⾔(Predicate)和⼀组过滤器(Filter)组成。
Predicate(断
⾔)路由转发的判断条件,我们可以通过 Predicate 对 HTTP 请求进⾏匹配,例如请求⽅式、请求路径、请求头、参数等,如果请求与断⾔匹
配成功,则将请求转发到相应的服务。
Filter(过滤
器)
过滤器,我们可以使⽤它对请求进⾏拦截和修改,还可以使⽤它对上⽂的响应进⾏再处理。
注意:其中 Route 和 Predicate 必须同时声明。
gateway特性:
基于 Spring Framework 5、Project Reactor 和 Spring Boot 2.0 构建。
能够在任意请求属性上匹配路由。
predicates(断⾔) 和 filters(过滤器)是特定于路由的。
集成了 Hystrix 熔断器。
集成了 Spring Cloud DiscoveryClient(服务发现客户端)。
易于编写断⾔和过滤器。
能够限制请求频率。
能够重写请求路径。
2、⼯作流流程
1. 客户端将请求发送到 Spring Cloud Gateway 上。
2. Spring Cloud Gateway 通过 Gateway Handler Mapping 到与请求相匹配的路由,将其发送给 Gateway Web Handler。
3. Gateway Web Handler 通过指定的过滤器链(Filter Chain),将请求转发到实际的服务节点中,执⾏业务逻辑返回响应结果。
4. 过滤器之间⽤虚线分开是因为过滤器可能会在转发请求之前(pre)或之后(post)执⾏业务逻辑。
5. 过滤器(Filter)可以在请求被转发到服务端前,对请求进⾏拦截和修改,例如参数校验、权限校验
、流量监控、⽇志输出以及协议转
换等。
6. 过滤器可以在响应返回客户端之前,对响应进⾏拦截和再处理,例如修改响应内容或响应头、⽇志输出、流量监控等。
响应原路返回给客户端。
总在请求都会进⾏处理到真正的服务springcloud难学吗
结合ruoyi配置看看
3、Predicate 断⾔
Predicate 断⾔作⽤: 实现 Route 路由的匹配规则(Predicate 是路由转发的判断条件)
断⾔使⽤规则:
⼀个路由可以包含多个不同断⾔
⼀个请求想要转发到指定的路由上,就必须同时匹配路由上的所有断⾔。
当⼀个请求同时满⾜多个路由的断⾔条件时,请求只会被⾸个成功匹配的路由转发。
常见的 Predicate 断⾔
断⾔⽰例说明
Path- Path=/dept/list/** 当请求路径与 /dept/list/** 匹配时,该请求才能被转发到 localhost:8001 上。
Before
- Before=2021-10-
20T11:47:34.255+08:00[Asia/Shanghai]
在 2021 年 10 ⽉ 20 ⽇ 11 时 47 分 34.255 秒之前的请求,才会被转发
到 localhost:8001 上。
After
- After=2021-10-
20T11:47:34.255+08:00[Asia/Shanghai]
在 2021 年 10 ⽉ 20 ⽇ 11 时 47 分 34.255 秒之后的请求,才会被转发
到 localhost:8001 上。
Between
- Between=2021-10-
20T15:18:33.226+08:00[Asia/Shanghai],2021-10-
20T15:23:33.226+08:00[Asia/Shanghai]
在 2021 年 10 ⽉ 20 ⽇ 15 时 18 分 33.226 秒 到 2021 年 10 ⽉ 20 ⽇ 15
时 23 分 33.226 秒之间的请求,才会被转发到 localhost:8001 服务器
上。
Cookie- Cookie=name,c.biancheng 携带 Cookie 且 Cookie 的内容为 name=c.biancheng 的请求,才会被转
发到 localhost:8001 上。
Header- Header=X-Request-Id,\d+请求头上携带属性 X-Request-Id 且属性值为整数的请求,才会被转发到
localhost:8001 上。
Method- Method=GET只有 GET 请求才会被转发到 localhost:8001 上。
4、依赖
5、动态路由
lb :uri 的协议,表⽰开启 Spring Cloud Gateway 的负载均衡功能。
service-name :服务名,Spring Cloud Gateway 会根据它获取到具体的微服务地址。
6、Filter 过滤器
通常情况下,出于安全⽅⾯的考虑,服务端提供的服务往往都会有⼀定的校验逻辑,例如⽤户登陆状态校验、签名校验等。
根据请求和响应分为两类
<!--特别注意:在 gateway ⽹关服务中不能引⼊ spring-boot-starter-web 的依赖,否则会报错--><!-- SpringCloud Gateway -->        <dependency >
<groupId >org.springframework.cloud </groupId >            <artifactId >spring-cloud-starter-gateway </artifactId >        </dependency >
<!-- SpringCloud Alibaba Nacos -->        <dependency >
<groupId >com.alibaba.cloud </groupId >
<artifactId >spring-cloud-starter-alibaba-nacos-discovery </artifactId >        </dependency >
<!-- SpringCloud Alibaba Nacos Config 配置中⼼ -->        <dependency >
<groupId >com.alibaba.cloud </groupId >
<artifactId >spring-cloud-starter-alibaba-nacos-config </artifactId >        </dependency >
<!-- SpringCloud Alibaba Sentinel 服务降级等 -->        <dependency >
<groupId >com.alibaba.cloud </groupId >
<artifactId >spring-cloud-starter-alibaba-sentinel </artifactId >        </dependency >
<!-- SpringCloud Alibaba Sentinel Gateway -->        <dependency >
<groupId >com.alibaba.cloud </groupId >
<artifactId >spring-cloud-alibaba-sentinel-gateway </artifactId >        </dependency >
<!-- Sentinel Datasource Nacos -->        <dependency >
<groupId >com.alibaba.csp </groupId >
<artifactId >sentinel-datasource-nacos </artifactId >        </dependency >
<!-- SpringBoot Actuator 监控 -->        <dependency >
<groupId >org.springframework.boot </groupId >            <artifactId >spring-boot-starter-actuator </artifactId >        </dependency >
12345678910111213141516171819202122232425262728293031323334353637383940414243
过滤器类型说明
Pre 类型这种过滤器在请求被转发到微服务之前可以对请求进⾏拦截和修改,例如参数校验、权限校验、流量监控、⽇志输出以及协议转换等操作。Post 类型这种过滤器在微服务对请求做出响应后可以对响应进⾏拦截和再处理,例如修改响应内容或响应头、⽇志输出、流量监控等。
按照作⽤范围分为两类
过滤器类型说明
GatewayFilter应⽤在单个路由或者⼀组路由上的过滤器。
GlobalFilter应⽤在所有的路由上的过滤器。
ok,就先到这⾥\(^o^)/~

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。