Spring Cloud Gateway是SpringCloud的全新子项目,该项目基于Spring5.x、SpringBoot2.x技术版本进行编写,意在提供简单方便、可扩展的统一API路由管理方式。
概念解释:
客户端向Spring Cloud Gateway发出请求。如果网关处理程序映射确定请求与路由匹配,则将其发送到网关Web处理程序。此处理程序运行时通过特定于请求的筛选链发送请求。过滤器被虚线分隔的原因是过滤器可以在发送代理请求之前或之后执行逻辑。执行所有“预”过滤逻辑,然后发出代理请求。在发出代理请求后,将执行“post”过滤器逻辑。
开始实际例子
Spring Cloud Gateway目前有两种方式进行配置:
application.yml配置文件方式
通过@Bean注解RouteLocator方法返回值
在本章会侧重针对配置文件方式进行讲解,当然RouteLocator方式也会简单的告诉大家的使用方式。
添加依赖
添加Spring Cloud Gateway相关依赖,pom.xml如下所示:
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.8.RELEASE
com.cecurs.gateway
gateway-service
jar
0.0.1-SNAPSHOT
gateway-service
Demo project for Spring Boot
1.8
Greenwich.SR3
org.springframework.cloud
spring-cloud-starter-gateway
org.springframework.boot
spring-boot-starter-actuator
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.boot
spring-boot-starter-test
test
org.projectlombok
lombok
true
ch.qos.logback
logback-classic
1.2.3
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
Spring Cloud Gateway Predicates
在我们开始本章内容之前我们要来先了解下Spring Cloud Gateway内部提供的所有谓语、断言,这样我们才能目标性的进行学习,我整理出来了一个脑图,如下所示:
每一个Predicate的使用,你可以理解为:当满足这种条件后才会被转发,如果是多个,那就是都满足的情况下被转发。
Path 方式匹配转发
通过Path转发示例,我们讲解下上面的两种配置,分别是application.yml以及RouteLocator。
配置文件匹配地址转发
我们在application.yml配置文件内添加对应的路由配置,如下所示:
server:
port: 8080
spring:
application:
name: GatewayService
cloud:
gateway:
routes:
- id: gateway-service
uri: https://blog.csdn.net
predicates:
- Path=/meteor_93
- id: user-server
# lb代表从注册中心获取服务
uri: lb://BUSINESSSERVICE
predicates:
# 转发该路径
- Path=/user/**
- id: blog
# lb代表从注册中心获取服务
uri: http://blog.yuqiyu.com
predicates:
# 匹配路径转发
- Path=/api-boot-datasource-switch.html
eureka:
client:
serviceUrl:
defaultZone: http://127.0.0.1:8081/eureka/ # 注册中心 本地测试
先来解释下route的组成部分:
id:路由的ID
uri:匹配路由的转发地址
predicates:配置该路由的断言,通过PredicateDefinition类进行接收配置。
在上面的配置中,当访问http://localhost:9090/api-boot-datasource-switch.html时就会被自动转发到http://blog.yuqiyu.com/api-boot-datasource-switch.html,这里要注意完全匹配Path的值时才会进行路由转发。
在上面的配置中,如果使用RouteLocator方式该怎么进行配置呢?
如下所示:
@Bean
public RouteLocator routeLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route("blog", r ->
r.path("/api-boot-datasource-switch.html").uri("http://blog.yuqiyu.com"))
.build();
}
以上请参考: https://segmentfault.com/a/1190000019101829
一、创建 eureka 工程
1.创建eureka工程,服务注册中心,pom.xml 文件,如下所示:
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.8.RELEASE
com.cecurs.eureka
eureka-service
jar
0.0.1-SNAPSHOT
eureka-service
eureka-service project for Spring Boot
1.8
Greenwich.SR3
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
#配置中心
server:
port: 8081 #服务注册中心端口号
spring:
application:
name: EurekaService
eureka:
instance:
hostname: 127.0.0.1 #服务注册中心IP地址
client:
registerWithEureka: false #是否向服务注册中心注册自己
fetchRegistry: false #是否检索服务
serviceUrl: #服务注册中心的配置内容,指定服务注册中心的位置
defaultZone: http://${eureka.instance.hostname}:${server.port}/EurekaService/eureka/
二、创建 gateway 项目
1、pom文件代码,如下所示:
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.8.RELEASE
com.cecurs.gateway
gateway-service
jar
0.0.1-SNAPSHOT
gateway-service
Demo project for Spring Boot
1.8
Greenwich.SR3
org.springframework.cloud
spring-cloud-starter-gateway
org.springframework.boot
spring-boot-starter-actuator
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.boot
spring-boot-starter-test
test
org.projectlombok
lombok
true
ch.qos.logback
logback-classic
1.2.3
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
server:
port: 8080
spring:
application:
name: GatewayService
cloud:
gateway:
routes:
- id: gateway-service
uri: https://blog.csdn.net
predicates:
- Path=/meteor_93
- id: user-server
# lb代表从注册中心获取服务
uri: lb://BUSINESSSERVICE
predicates:
# 转发该路径
- Path=/user/**
- id: blog
# lb代表从注册中心获取服务
uri: http://blog.yuqiyu.com
predicates:
# 匹配路径转发
- Path=/api-boot-datasource-switch.html
eureka:
client:
serviceUrl:
defaultZone: http://127.0.0.1:8081/eureka/ # 注册中心 本地测试
具体代码,联系qq: 470801428 获取。