1. Gateway
- 使用网关作为接口的服务的统一代理,前端通过网关完成服务的统一调用
1.1 路由(Route)
- 包含 ID, 目标URL, Predicate集合, Filter集合
1.2 断言(Predicate)
- Path 路由断言
- Query 路由断言
- Method 路由断言
- Header 路由断言
- 自定义路由断言,继承 AbstractRoutePredicateFactory
1.3 过滤器(Filter)
- AddRequestHeader 过滤器
- RemoveRequestHeader 过滤器
- SetStatus 过滤器
- RedirectTo 过滤器
- 自定义过滤器,继承 AbstractGatewayFilterFactory
2. 实战
- Spring Cloud Gateway 内部通过 Netty + Webflux 实现,Webflux 与 Spring MVC 存在冲突,所以不要引入
spring-boot-starter-web
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
2.1 路由配置(服务IP)
server:
port: 8010
spring:
application:
name: concrete-gateway
cloud:
gateway:
discovery:
locator:
enabled: true # 开启注册与发现功能
lower-case-service-id: true # 把服务名转换为小写,Eureka中默认是大写
routes:
- id: eureka-client
uri: http://127.0.0.1:8770
predicates:
- path=/user/**
@SpringBootApplication
public class ConcreteGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(ConcreteGatewayApplication.class, args);
}
}
请求地址 http://localhost:8010/user/query
2.2 动态路由配置(面向服务的路由)
- Eureka服务名
@SpringBootApplication
@EnableEurekaClient
public class ConcreteGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(ConcreteGatewayApplication.class, args);
}
}
server:
port: 8010
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: concrete-gateway
cloud:
gateway:
discovery:
locator:
enabled: true # 开启注册与发现功能
lower-case-service-id: true # 把服务名转换为小写,Eureka中默认是大写
routes: # List 类型写法:横线 或 逗号 标识一个对象
- id: eureka-client # 自定义标识,唯一
uri: lb://concrete-eureka-client # lb表示从注册中心获取服务
# predicates: Path=/user/**
predicates:
- Path=/user/**
Path=/user/**
表示多级 Path, 例如 /user/query/1001
网友评论