12.1 Spring CloudGateway简介
Gateway 是基于 Spring 5.0 、Spring boot 2.0 、Project item 来开发的
特点:
- 限流
- 路径重写
- 动态路由
- 集成 Spring Cloud DiscoveryClient
- 集成 Hystrix 断路器
和 Zuul 对比
- 1.Zuul 是 Netflix 公司的开源产品,Spring Cloud Gateway 是 Spring 家族中产品,可以和 Spring 家族中的其他组件更换的融合
- 2.Zuul1 不支持长链接,例如 websocket
- 3.Spring Cloud Gateway 支持限流
- 4.Zuul 基于 Servlet,Spring Cloud Gateway 基于 Netty 来开发,实现了异步和非阻塞,占用资源更小,性能强于 Zuul
- 未来 Spring Cloud Gateway 更具有前景
12.2 基本用法
Spring Cloud Gateway 支持两种不同的用法:
- 编码式
- yml 配置
两种都看下
1.编码式
首先创建 Spring Boot 项目的 moudle 模块,属于 javaboycloud 项目,添加 Spring Cloud Gateway 依赖;
不要添加 Web 依赖,因为 Web 依赖默认添加 Tomcat,而 Gateway 没有使用 Tomcat ,使用的是 Netty。只需要添加Gateway 依赖即可,Gateway 依赖中包含 Netty 依赖
-
(1)项目创建成功后,只需要配置一个 RouteLocator 这样一个 Bean ,首先看一下测试地址
http://httpbin.org/get(可以直接用)
-
(2)在启动类加一个 Bean
@Bean
RouteLocator routeLocator(RouteLocatorBuilder builder){
return builder.routes()
.route("javaboy_route",r ->r.path("/get").uri("http://httpbin.org"))
.build();
}
意思是把 “/get” 路径的请求转发到 “http://httpbin.org” 上去访问 "/get"请求
- (3)启动项目,访问:
http://localhost:8080/get
这就是编程式
properties 配置 - (1)注释 RouteLocator Bean 对象
// @Bean
RouteLocator routeLocator(RouteLocatorBuilder builder){
return builder.routes()
.route("javaboy_route",r ->r.path("/get").uri("http://httpbin.org"))
.build();
}
spring.cloud.gateway.routes[0].id=javaboy-route
spring.cloud.gateway.routes[0].predicates[0]=Path=/get
spring.cloud.gateway.routes[0].uri=http://httpbin.org
routes 路由是一个数组,predicates 判断也是一个数组,配置数组要用中括号,中括号内是数组的第几项,例如第一项:"[0]",第二项:"[1]"
- (2)重启项目,访问:
http://localhost:8080/get
依然成功
这就是 properties 配置
2.yml 配置
- (1)注释 RouteLocator Bean 对象
// @Bean
RouteLocator routeLocator(RouteLocatorBuilder builder){
return builder.routes()
.route("javaboy_route",r ->r.path("/get").uri("http://httpbin.org"))
.build();
}
spring:
cloud:
gateway:
routes:
- id: javaboy-route
uri: http://httpbin.org
predicates:
- Path=/get
yml 中的数组要加已个 “-”,每项 “:” 后边要有一个空格
- (2)重启项目,访问:
http://localhost:8080/get
,继续成功
这就是 yml 配置