网关作为流量的入口,常用功能包括路由转发、权限校验、限流控制等。而 springcloud gateway 作为 SpringCloud 官方推出的第二代网关框架,取代了 Zuul 网关。
网关提供 API 全托管服务,丰富的 API 管理功能,辅助企业管理大规模的 API,以降低管理成本和安全风险,包括协议适配、协议转发、安全策略、防刷、流量、监控日志等功能。
Spring Cloud Gateway 旨在提供一种简单而有效的方式来对 API 进行路由,并为他们提供切面,例如:安全性,监控/指标和弹性等。
官方文档地址:https://docs.spring.io/spring-cloud-gateway/docs/3.1.4/reference/html/#the-query-route-predicate-factory
**一、Spring Cloud Gateway 特点: **
- 基于 Spring5,支持响应式编程和 SpringBoot2.0
- 支持使用任何请求属性进行路由匹配
- 特定于路由的断言和过滤器
- 集成 Hystrix 进行断路保护
- 集成服务发现功能
- 易于编写 Predicates 和 Filters
- 支持请求速率限制
- 支持路径重写
二、核心概念
- 路由。路由是网关最基础的部分,路由信息有一个 ID、一个目的 URL、一组断言和一组 Filter 组成。如果断言路由为真,则说明请求的 URL 和配置匹配
- 断言。Java8 中的断言函数。Spring Cloud Gateway 中的断言函数输入类型是 Spring5.0框架中的 ServerWebExchange。Spring Cloud Gateway 中的断言函数允许开发者去定义匹配 来自于 http request中的任何信息,比如请求头和参数等。
- 过滤器。一个标准的 Spring webFilter。Spring cloud gateway 中的 filter 分为两种类型的 Filter,分别是 Gateway Filter 和 Global Filter。过滤器 Filter 将会对请求和响应进行修改处理
三、使用步骤
1)创建gateway子项目,并添加Gateway的依赖(注意gateway需要排除springbootweb的依赖)
同时依赖我们的gulimall-common模块(里面有我们所有模块所共同需要的依赖,bean等),可通过下面这种方法避免继承父级依赖
<dependency>
<groupId>com.gulimall</groupId>
<artifactId>gulimall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</exclusion>
</exclusions>
</dependency>
2)由于我们依赖了gulimall-common模块,而gulimall-common中添加了nacos作为注册中心和配置中心的依赖,所以我们需要在gateway模块中添加注册中心和配置中心相关的配置
①添加注册中心的配置
引入依赖
在application.properties中添加spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
和spring.application.name=gulimall-gateway
开启注册与发现的注解
- 其中那个@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})是因为我们继承了mybatisplus的相关依赖,他会进行mysql的相关配置,而我们的路由功能不
需要也就没有在配置中配置相关的url、driver等配置,所有通过这个注解来忽略相关mysql的加载
②添加配置中心的配置
引入依赖
在bootstrap.yml配置文件中配置 Nacos Config 元数据
3)进行路由的相关配置,可以参考官网文档https://docs.spring.io/spring-cloud-gateway/docs/3.1.4/reference/html/#the-query-route-predicate-factory
最需要注意的点就是引入gateway依赖时,如果继承了父级依赖,而父级依赖中有Springbootweb依赖,要记得排除掉这个依赖
标签:网关,12,SpringCloud,Gateway,依赖,spring,gateway,路由 From: https://www.cnblogs.com/morehair/p/17018489.html