feat(gateway): 完成 gateway

gateway 总结完成
master
土豆兄弟 1 month ago
parent 400a561234
commit 676a1e8004

@ -64,7 +64,74 @@
- [GlobalLoginOrRegisterFilter.java]
---
## 9. 代码与文件两种方式配置网关路由
- 文件进行配置
```json
[
{
"id": "dev-protocol-springcloud-nacos-client",
"order": 0, // order 越小优先级越高0
"predicates": [
{
"args": {
"pattern": "/dev-protocol-springcloud-gateway/dev-protocol-spring-cloud-nacos/**"
},
"name": "Path"
}
],
"uri": "lb://dev-protocol-spring-cloud-nacos"
"filters": [
{
"name": "HeaderToken"
},
{
"name": "StripPrefix",
"args": {
"parts": "1" // 用来跳过上面的 pattern 前面的配置, 因为 [bootstrap.yml] 中的配置 context-path
}
}
]
}
]
```
- 配置类进行配置: [RouteLocatorConfig.java]
## 10. 验证网关微服务功能可用性
## 11. SpringCloud Gateway 微服务入口网关总结
- src/main/resources/http 下
- [HeaderTokenGatewayFilterFactory.java]
- 注意配置文件中的过滤器名称就是 [HeaderToken]GatewayFilterFactory , 框内的名称
## 11. SpringCloud Gateway 微服务入口网关总结
- SpringCloud Gateway 在工程中的位置
- SpringCloud Gateway 是工程的最前端
- 网关是微服务工程架构下的唯一入口(客户端)
- Gateway 提供了统一的路由方式基于Filter 链的方式提供了网关的基本功能
---
- SpringCloud Gateway 与Zuul 的区别
- Zuul 1.X是一个基于阻塞 I/0 的 APIGateway
- 基于 Servlet2.5 使用阻塞架构,不支持任何长连接
- Zuu 的设计模式与 Nginx 很像,每次 I/0 操作都是从工作线程中选择一个执行,请求线程被阻塞到工作线程完成
- SpringCloud Gatewgy建立在 Spring5、Project Reactor 和 SpringBoot2 之上使用非阻塞API
- SpringCloud Gateway 支持 WebSocket,并且与 Spring 紧密集成拥有更好的开发体验
---
- SpringCloud Gateway 三大核心概念(Route、Predicate、Filter)
- Route(路由):是构建网关的基本模块由ID、URI、一系列的断言和过滤器组成
- Predicate(断言):可以匹配 HTTP 请求中所有的内容(请求头、参数等等),请求与断言相匹配则通过当前断言
- Filter(过滤器):包括全局和局部过滤器,可以在请求被路由前后对请求进行更改
- 用户 -> SpringCloud Gateway -> Predicate(s) -> Filter(s) -> Service
---
- SpringCloud Gateway 过滤器
- 全局过滤器和局部过滤器
- 全局过滤器作用于所有的路由,不需要单独配置,通常用来实现统一化处理的业务需求
- 局部过滤器实现并生效的三个步骤
- 需要实现 GatewayFiter, Ordered, 实现相关的方法
- 加入到过滤器工厂,并且将工厂注册到 Spring 容器中
- 在配置文件中进行配置,如果不配置则不启用此过滤器规则(路由规则)
---
- SpringCloud Gateway 路由的配置
- 常用的三种配置方式
- 在代码中注入 RouteLocator Bean,并手工编写配置路由定义
- 在 application.yml、bootstrap.yml 等配置文件中配置 spring.cloud.gateway
- 通过配置中心(Nacos)实现动态的路由配置

@ -0,0 +1,31 @@
package org.example.conf;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* <h1></h1>
* */
@Configuration
public class RouteLocatorConfig {
/**
* <h2>使, </h2>
* */
@Bean
public RouteLocator loginRouteLocator(RouteLocatorBuilder builder) {
// 手动定义 Gateway 路由规则需要指定 id、path 和 uri
return builder.routes()
.route(
"e_commerce_authority",
r -> r.path(
"/dev-protocol-springcloud-gateway/e-commerce/login",
"/dev-protocol-springcloud-gateway/e-commerce/register"
).uri("http://localhost:9001/")
).build();
}
}

@ -1,17 +1,17 @@
### 登录
POST 127.0.0.1:9001/imooc/e-commerce/login
### 登录 -> 向网关发
POST 127.0.0.1:9001/dev-protocol-springcloud-gateway/e-commerce/login
Content-Type: application/json
{
"username": "Qinyi@imooc.com",
"username": "q@by.com",
"password": "25d55ad283aa400af464c76d713c07ad"
}
###
POST 127.0.0.1:9001/imooc/e-commerce/register
### 注册 -> 向网关发
POST 127.0.0.1:9001/dev-protocol-springcloud-gateway/e-commerce/register
Content-Type: application/json
{
"username": "ImoocQinyi@imooc.com",
"username": "q@by.com",
"password": "25d55ad283aa400af464c76d713c07ad"
}

@ -1,5 +1,6 @@
### 查询服务
GET http://127.0.0.1:9001/imooc/ecommerce-nacos-client/nacos-client/service-instance?serviceId=e-commerce-gateway
### 查询服务 - (测试gateway)
GET http://127.0.0.1:9001/dev-protocol-springcloud-gateway/ecommerce-nacos-client/nacos-client/service-instance?serviceId=e-commerce-gateway
Accept: application/json
e-commerce-user: eyJhbGciOiJSUzI1NiJ9.eyJlLWNvbW1lcmNlLXVzZXIiOiJ7XCJpZFwiOjE3LFwidXNlcm5hbWVcIjpcIkltb29jUWlueWlAaW1vb2MuY29tXCJ9IiwianRpIjoiMGIxNzQyYWItMWU3OC00OTZjLWIyNTAtMjNkZGQ1ZGEyZTU1IiwiZXhwIjoxNjI0MjA0ODAwfQ.QKGHzohSHdYDHzUVHpe9gNPUgzfkPwrSbB-WiMWYjLlt2tr9BufzZM8bSt-whb_bd0hKoC6rkYYO0WUVR67uSML-2yaTL1xMIn8GH9Flyig3rpO4vefL3Hp2TXIpwHHa7WlKsLzcUpNk9lxWs2B5k0ICdYCH_jD5Tx6N7CzfSUG9u4fOnVeM9UFE2nX_DURupUh_DKCc2oOoMeyCSR7Ma8-Ab4WQU3r-U0YivR8G1A0kmKOIoTeRhM3LcPuxUPh3rCbrjzMg--fexRGw0O38Qsby6pz-ku2IlTyFXY6_jNOG1BZR34-jBOnaIciP1TExw9bFumeuC2GcowTHJVH1Nw
token: imooc
# 这里的校验信息在 HeaderTokenGatewayFilter 中配置写死的
Loading…
Cancel
Save