spring cloud整合gateway网关
一. 什么是微服务网关?
微服务网关是位于服务之前或者应用程序之前的一个层面,用于保护、增强和控制微服务的访问。
其常见的作用有:
- 鉴权校验:验证是否认证和授权
- 统一入口:提供所有微服务的入口点,起到隔离作用,保障服务的安全性
- 限流熔断
- 路由转发
- 负载均衡
- 链路追踪
二. 微服务集成网关
1. 引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<!--添加nacos客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
注意点
网关项目需要去除spring boot web的依赖,如果引入了 **spring-boot-starter-web**的依赖,项目启动会报错
2. bootstrap.yml配置
由于加载顺序的原因,gateway项目需要在bootstrap.yml中加入nacos注册中心地址
spring:
application:
name: micro-gateway
cloud:
nacos:
discovery:
server-addr: localhost:8848
config:
server-addr: localhost:8848 #Nacos配置中心地址
file-extension: yaml #文件拓展格式
profiles:
active: dev
配置中心application.yml配置
```yaml server: port: 9010
spring: application: name: micro-gateway cloud: gateway: discovery: locator: enabled: true lower-case-service-id: true #使用小写service-id routes:
- id: micro-auth
uri: lb://micro-auth
predicates:
- Path=/micro-auth/**
filters:
- StripPrefix=1
- id: micro-upms
uri: lb://micro-upms
predicates:
- Path=/micro-upms/**
filters:
- StripPrefix=1
- id: micro-data
uri: lb://micro-data
predicates:
- Path=/micro-data/**
filters:
- StripPrefix=1
security: oauth2: resourceserver: jwt: jwk-set-uri: ‘http://localhost:9010/micro-auth/rsa/publicKey‘ #配置RSA的公钥访问地址 redis: host: localhost port: 8203 password: admin
secure: ignore: urls: #配置白名单路径
- "/doc.html"
- "/swagger-resources/**"
- "/swagger/**"
- "/**/v2/api-docs"
- "/**/*.js"
- "/**/*.css"
- "/**/*.png"
- "/**/*.ico"
- "/webjars/springfox-swagger-ui/**"
- "/actuator/**"
- "/micro-auth/oauth/token"
- "/micro-auth/rsa/publicKey"
- "/micro-auth/auth/**"
- "/micro-upms/api/admin/**"
management: #开启SpringBoot Admin的监控 endpoints: web: exposure: include: ‘*’ endpoint: health: show-details: always
<a name="77744975"></a>
## 三. spring gateway架构流程
<a name="6c3828ef"></a>
### 1. 详解SpringCloud Gateway架构流程
- 网关的配置项
- 路由:路由是网关的基本单元,由ID、URLI、一组Predicate、一组Filter组成,根据Predicate进行匹配转发
route组成部分 id:路由的ID uri:匹配路由的转发地址 predicates:配置该路由的断⾔,通过 PredicateDefinition类进⾏接收配置。 order:路由的优先级,数字越⼩,优先级越⾼。
- 交互流程
1. 客户端向Spring Cloud Gateway发出请求
2. 如果⽹关处理程序映射确定请求与路由匹配
3. 则将其发送到⽹关Web处理程序
4. 通过特定过滤器链运⾏,前置处理-后置处理
<br />![](https://gitee.com/BBQPlus/source-picture/raw/master/image-20210718111743075.png#id=BTDSU&originHeight=861&originWidth=722&originalType=binary&ratio=1&status=done&style=none)
<a name="1b64e824"></a>
### 2. 微服务SpringCloud Gateway内置路由断言讲解
- 什么是Gateway路由断言
- Predicate 来源于Java8,接受输⼊参数,返回⼀个布尔值结果
- Spring Cloud Gateway 中 Spring 利⽤ Predicate 的特 性实现了各种路由匹配规则
- 转发的判断条件,SpringCloud Gateway⽀持多种⽅ 式,常⻅如:Path、Query、Method、Header等
- ⽀持多个Predicate请求的转发是必须满⾜所有的 Predicate后才可以进⾏路由转发
- 参数编写规则
predicates:
- Host=
- Path=
- Method=
- Header=
- Query=
- Cookie= ```
3. Spring Cloud Gateway 过滤器
- 网关过滤器的生命周期
- PRE:这种过滤器在请求被路由之前调用,一般用于鉴权、限流等
- POST:这种过滤器在路由到微服务以后执行,一般用户修改相应结果,比如增加header信息、打点结果日志
- 网关过滤器分类
- 局部过滤器 GatewayFilter: 应用在某个路由上,每个过滤器工厂都对应一个实现类,并且这些类的名称必须以GatewayFilterFactory结尾
- 内置局部过滤器,顶级接口,GatewayFilterFactory
- 内置全局过滤器, 顶级接口 GlobalFilter