1. 核心概念

1.1 导入依赖
<!--spring cloud gateway网关依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
1.2 在bootstrap.yml中配置路由规则
1.2.1 Path 配置请求路径路由
server:
port: 7000
spring:
application:
name: gateway-server # 应用名称
cloud:
gateway:
# 路由规则
routes:
- id: shop-goods # 路由 ID,唯一
uri: http://localhost:9101/ # 目标URI,路由到微服务的地址
predicates: # 断言(判断条件)
- Path=/goods/** # 匹配对应 URL 的请求,将匹配到的请求追加在目标 URI 之后
1.2.2 Query 请求中是否包含请求参数
server:
port: 7000
spring:
application:
name: gateway-server # 应用名称
cloud:
gateway:
# 路由规则
routes:
- id: shop-goods # 路由 ID,唯一
uri: http://localhost:9101/ # 目标URI,路由到微服务的地址
predicates: # 断言(判断条件)
#- Path=/goods/** # 匹配对应 URL 的请求,将匹配到的请求追加在目标 URI 之后
#- Query=token # 匹配请求参数中包含 token 的请求
- Query=token, abc. # 匹配请求参数中包含 token ,并且参数的值 满足正则表达式 abc. 的请求
http://localhost/goods/test?token=123
abc. 其中"." 代表任意字符
http://localhost/goods/test?token=abc1
1.2.3 Method 根据请求方式匹配
server:
port: 7000
spring:
application:
name: gateway-server # 应用名称
cloud:
gateway:
# 路由规则
routes:
- id: shop-goods # 路由 ID,唯一
uri: http://localhost:9101/ # 目标URI,路由到微服务的地址
predicates: # 断言(判断条件)
#- Path=/goods/** # 匹配对应 URL 的请求,将匹配到的请求追加在目标 URI 之后
#- Query=token # 匹配请求参数中包含 token 的请求
#- Query=token, abc. # 匹配请求参数中包含 token ,并且参数的值 满足正则表达式 abc. 的请求
- Method=GET # 匹配任意 GET 请求
1.2.4 datatime 通过时间匹配,路由
server:
port: 7000
spring:
application:
name: gateway-server # 应用名称
cloud:
gateway:
# 路由规则
routes:
- id: shop-goods # 路由 ID,唯一
uri: http://localhost:9101/ # 目标URI,路由到微服务的地址
predicates: # 断言(判断条件)
#- Path=/goods/** # 匹配对应 URL 的请求,将匹配到的请求追加在目标 URI 之后
#- Query=token # 匹配请求参数中包含 token 的请求
#- Query=token, abc. # 匹配请求参数中包含 token ,并且参数的值 满足正则表达式 abc. 的请求
#- Method=POST # 匹配任意 POST 请求
- After=2021-04-25T10:00:00+08:00[Asia/Shanghai] # 匹配 2021-4-25 10:00:00之后
#- Before=2021-04-25T10:00:00+08:00[Asia/Shanghai] # 匹配这个时间之前
#- Between=2021-04-25T10:00:00+08:00[Asia/Shanghai],2021-04-25T12:00:00+08:00[Asia/Shanghai] # 匹配两个时间之间
1.2.5 RemoteAddr 通过远程地址进行匹配,路由
http://192.168.100.233:7000/goods/test
server:
port: 7000
spring:
application:
name: gateway-server # 应用名称
cloud:
gateway:
# 路由规则
routes:
- id: shop-goods # 路由 ID,唯一
uri: http://localhost:9101/ # 目标URI,路由到微服务的地址
predicates: # 断言(判断条件)
#- Path=/goods/** # 匹配对应 URL 的请求,将匹配到的请求追加在目标 URI 之后
#- Query=token # 匹配请求参数中包含 token 的请求
#- Query=token, abc. # 匹配请求参数中包含 token ,并且参数的值 满足正则表达式 abc. 的请求
#- Method=POST # 匹配任意 POST 请求
#- After=2021-04-25T10:00:00+08:00[Asia/Shanghai] # 匹配 2021-4-25 10:00:00之后
#- Before=2021-04-25T10:00:00+08:00[Asia/Shanghai] # 匹配这个时间之前
#- Between=2021-04-25T10:00:00+08:00[Asia/Shanghai],2021-04-25T12:00:00+08:00[Asia/Shanghai] # 匹配两个时间之间
- RemoteAddr=192.168.100.233/24 # 匹配远程地址是RemoteAddr的请求,24 表示子网掩码
1.2.5 Header 通过请求头匹配,路由
server:
port: 7000
spring:
application:
name: gateway-server # 应用名称
cloud:
gateway:
# 路由规则
routes:
- id: shop-goods # 路由 ID,唯一
uri: http://localhost:9101/ # 目标URI,路由到微服务的地址
predicates: # 断言(判断条件)
#- Path=/goods/** # 匹配对应 URL 的请求,将匹配到的请求追加在目标 URI 之后
#- Query=token # 匹配请求参数中包含 token 的请求
#- Query=token, abc. # 匹配请求参数中包含 token ,并且参数的值 满足正则表达式 abc. 的请求
#- Method=POST # 匹配任意 POST 请求
#- After=2021-04-25T10:00:00+08:00[Asia/Shanghai] # 匹配 2021-4-25 10:00:00之后
#- Before=2021-04-25T10:00:00+08:00[Asia/Shanghai] # 匹配这个时间之前
#- Between=2021-04-25T10:00:00+08:00[Asia/Shanghai],2021-04-25T12:00:00+08:00[Asia/Shanghai] # 匹配两个时间之间
#- RemoteAddr=192.168.100.233/24 # 匹配远程地址是RemoteAddr的请求,24 表示子网掩码
- Header=token, \d+ # 请求头携带token \d+ 值得正则表达式
2 动态路由(服务发现得路由规则)
动态路由 就是将gateway 注册到,服务注册中心,这里我使用的是nacos 服务注册中心
2.1 动态获取URI
2.1.1 导入nacos的依赖
<!--nacos配置中心客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--nacos服务注册客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.1.2 bootstrap.yml
server:
port: 7000
spring:
application:
name: gateway-server # 应用名称
cloud:
gateway:
# 路由规则
routes:
- id: shop-goods # 路由 ID,唯一
uri: lb://shop-goods # 根据服务名称从注册中心获取服务请求地址
predicates: # 断言(判断条件)
- Path=/goods/** # 匹配对应 URL 的请求,将匹配到的请求追加在目标 URI 之后
#- Query=token # 匹配请求参数中包含 token 的请求
#- Query=token, abc. # 匹配请求参数中包含 token ,并且参数的值 满足正则表达式 abc. 的请求
#- Method=POST # 匹配任意 POST 请求
#- After=2021-04-25T10:00:00+08:00[Asia/Shanghai] # 匹配 2021-4-25 10:00:00之后
#- Before=2021-04-25T10:00:00+08:00[Asia/Shanghai] # 匹配这个时间之前
#- Between=2021-04-25T10:00:00+08:00[Asia/Shanghai],2021-04-25T12:00:00+08:00[Asia/Shanghai] # 匹配两个时间之间
#- RemoteAddr=192.168.100.233/24 # 匹配远程地址是RemoteAddr的请求,24 表示子网掩码
#- Header=token, \d+ # 请求头携带token \d+ 值得正则表达式
nacos:
# 注册中心配置
discovery:
server-addr: localhost:8848 # nacos 注册中心地址
namespace: 0e883794-4414-4d41-a177-6d335d304e42 # 开发环境 指定 具体的命名空间id
#group: DEFAULT_GROUP # 分组 默认分组可以省略
# 配置中心配置
config:
#enabled: false #关闭配置
server-addr: localhost:8848 # Nacos 配置中心地址
namespace: 0e883794-4414-4d41-a177-6d335d304e42 # 开发环境 指定 具体的命名空间id
group: TEST_GROUP # 分组
name: test-config-dev #dataid 内容
2.2 服务名称转发(简化配置文件)
2.2.1 bootstrap.yml (nacos+gateway)(最终版)
server:
port: 7000
spring:
application:
name: gateway-server # 应用名称
cloud:
gateway:
discovery:
locator:
# 是否与服务发现组件进行结合,通过 serviceId 转发到具体的微服务
enabled: true #是否开启基于服务发现得路由规则
lower-case-service-id: true # 是否将服务名称转小写
nacos:
# 注册中心配置
discovery:
server-addr: localhost:8848 # nacos 注册中心地址
namespace: 0e883794-4414-4d41-a177-6d335d304e42 # 开发环境 指定 具体的命名空间id
#group: DEFAULT_GROUP # 分组 默认分组可以省略
# 配置中心配置
config:
#enabled: false #关闭配置
server-addr: localhost:8848 # Nacos 配置中心地址
namespace: 0e883794-4414-4d41-a177-6d335d304e42 # 开发环境 指定 具体的命名空间id
group: TEST_GROUP # 分组
name: test-config-dev #dataid 内容
版权声明:本文为qq_39576977原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。