簡單嘗試Spring Cloud Gateway


 簡單嘗試Spring Cloud Gateway

簡介

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就先介紹到這里,當然它還有很多強大的功能,在這里並沒有一一展開的去講。如有疑問,歡迎評論區留言哦~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM