手记

简单尝试Spring Cloud Gateway

2019-06-27 08:49:343311浏览

凌波微步

1实战 · 16手记 · 1推荐

简介

Spring Cloud Gateway是一个API网关,它是用于代替Zuul而出现的。Spring Cloud Gateway构建于Spring生态系统之上,包括Spring5,SpringBoot2等。它的目标是提供简单、有效的方式路由你的API。

Spring Cloud Gateway不能在传统的Servlet容器中工作,也不能构建成一个war包工作。这一点很重要。

重要概念

路由:Gateway的基础构建模块。它包括一个ID,一个目标URL,一个断言集合和一个过滤器集合。如果断言判断为真,则路由匹配。
断言:这是Java8的新增功能,输入的类型为Spring框架的ServerWebExchange。它可以匹配HTTP请求中的任何东西,比如:请求头或者参数。
过滤器:是Spring框架的GatewayFilter,请求和响应都可以被Filter修改。
  Spring Cloud Gateway的流程图如下:

创建一个简单的路由

首先我们使用IDEA创建Spring-boot项目,并选择spring-cloud-starter-gateway依赖,请注意,这里千万不能选择spring-boot-starter-web,它们两个不能同时存在。然后我们在启动类中,增加如下代码:

@Bean
public RouteLocator myRoutes(RouteLocatorBuilder builder) {
    return builder.routes()
            .route(p -> p
                    .path("/get")
                    .filters(f -> f.addRequestHeader("Hello", "World"))
                    .uri("http://httpbin.org"))
            .build();
}

myRoutes方法的输入参数类型为RouteLocatorBuilder,它可以非常简单的向路由中增加断言和过滤器。上例中,我们的断言为“/get”,凡是访问路由网关中的“/get”路径,都会在请求头中增加“Hello”—“World”键值对,并且会转发到http://httpbin.org。我们启动项目,并在浏览器中访问http://localhost:8080/get,结果如下:

当我们访问http://localhost:8080/get时,Gateway首先会判断路径/get,确定路径/get符合条件后,在请求头中添加“Hello”—“World”。然后会转发请求到http://httpbin.org/get,然后返回上图的响应。

使用Hystrix熔断

我们还可以在Gateway中,使用熔断机制,当我们转发请求,获取的响应超时(504错误)时,可以唤起我们设置的熔断措施,并返回预设的结果。代码如下:

@Bean
  public RouteLocator myRoutes(RouteLocatorBuilder builder) {
      return builder.routes()
              .route(p -> p
                      .path("/get")
                      .filters(f -> f.addRequestHeader("Hello", "World"))
                      .uri("http://httpbin.org:80"))
              .route(p -> p
                      .host("*.hystrix.com")
                      .filters(f -> f.hystrix(config -> config
                              .setName("myHystrix")
                              .setFallbackUri("forward:/fallback")))
                      .uri("http://httpbin.org"))
              .build();
  }
 
  @RequestMapping("fallback")
  public String fallback() {
      return "Hello,Hystrix fallback";
  }

我们看方法中的第二个route,断言的判断为Host=.hystrix.com,当请求头中的Host为.hystrix.com,进入此路由,然后再过滤器中,设置Hystrix熔断,当请求超时时,请求转发到Gateway中的“/fallback”,"/fallback"我们将返回“Hello,Hystrix fallback”。我们启动Gateway,并通过Postman配置请求头 Host=www.hystrix.com,访问http://localhost:8080/delay/3。结果如下:

Spring Cloud Gateway就先介绍到这里,当然它还有很多强大的功能,在这里并没有一一展开的去讲。如有疑问,欢迎评论区留言哦~

···························
欢迎关注课程:《知识拆解+经典定时任务案例 精讲Java定时任务框架Elastic-Job和Quartz》

1人推荐
随时随地看视频
慕课网APP