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-gatewaycloud:nacos:discovery:server-addr: localhost:8848config: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-authuri: lb://micro-authpredicates:- Path=/micro-auth/**filters:- StripPrefix=1- id: micro-upmsuri: lb://micro-upmspredicates:- Path=/micro-upms/**filters:- StripPrefix=1- id: micro-datauri: lb://micro-datapredicates:- 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 /><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

