这是我参与8月更文挑战的第19天,活动详情查看:8月更文挑战
使用网关
1、添加依赖
<!-- spring cloud gateway 依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
2、resources/application.yml配置文件
server:
port: 8080
spring:
application:
name: demo-gateway
cloud:
gateway:
routes:
# 系统模块
- id: demo-system
uri: http://localhost:9201/
predicates:
- Path=/system/**
filters:
- StripPrefix=1
3、网关启动类
@SpringBootApplication
public class GatewayApplication
{
public static void main(String[] args)
{
SpringApplication.run(GatewayApplication.class, args);
System.out.println("--网关启动成功--");
}
}
提示
目前已经存在demo-gateway网关服务,用于路由转发、异常处理、限流、降级、接口、鉴权等等。
路由规则
Spring Cloud Gateway创建Route对象时, 使用RoutePredicateFactory创建Predicate对象,Predicate对象可以赋值给Route。
Spring Cloud Gateway包含许多内置的Route Predicate Factories。- 所有这些断言都匹配 HTTP 请求的不同属性。
- 多个
Route Predicate Factories可以通过逻辑与(and)结合起来一起使用。
路由断言工厂RoutePredicateFactory包含的主要实现类如图所示,包括Datetime、请求的远端地址、路由权重、请求头、Host 地址、请求方法、请求路径和请求参数等类型的路由断言。
Datetime
匹配日期时间之后发生的请求
spring:
application:
name: demo-gateway
cloud:
gateway:
routes:
- id: demo-system
uri: http://localhost:9201/
predicates:
- After=2021-02-23T14:20:00.000+08:00[Asia/Shanghai]
Cookie
匹配指定名称且其值与正则表达式匹配的cookie
spring:
application:
name: demo-gateway
cloud:
gateway:
routes:
- id: demo-system
uri: http://localhost:9201/
predicates:
- Cookie=loginname, admin
测试 curl http://localhost:8080/system/config/1 --cookie "loginname=admin"
Header
匹配具有指定名称的请求头,\d+值匹配正则表达式
spring:
application:
name: demo-gateway
cloud:
gateway:
routes:
- id: demo-system
uri: http://localhost:9201/
predicates:
- Header=X-Request-Id, \d+
Host
匹配主机名的列表
spring:
application:
name: demo-gateway
cloud:
gateway:
routes:
- id: demo-system
uri: http://localhost:9201/
predicates:
- Host=**.somehost.org,**.anotherhost.org
Method
匹配请求methods的参数,它是一个或多个参数
spring:
application:
name: demo-gateway
cloud:
gateway:
routes:
- id: demo-system
uri: http://localhost:9201/
predicates:
- Method=GET,POST
Path
匹配请求路径
spring:
application:
name: demo-gateway
cloud:
gateway:
routes:
- id: demo-system
uri: http://localhost:9201/
predicates:
- Path=/system/**
Query
匹配查询参数
spring:
application:
name: demo-gateway
cloud:
gateway:
routes:
- id: demo-system
uri: http://localhost:9201/
predicates:
- Query=username, abc.
RemoteAddr
匹配IP地址和子网掩码
spring:
application:
name: demo-gateway
cloud:
gateway:
routes:
- id: demo-system
uri: http://localhost:9201/
predicates:
- RemoteAddr=192.168.10.1/0
Weight
匹配权重
spring:
application:
name: demo-gateway
cloud:
gateway:
routes:
- id: demo-system-a
uri: http://localhost:9201/
predicates:
- Weight=group1, 8
- id: demo-system-b
uri: http://localhost:9201/
predicates:
- Weight=group1, 2