簡單嘗試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,它們兩個不能同時存在。然後我們在啟動類中,增加如下代碼:
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錯誤)時,可以喚起我們設置的熔斷措施,並返回預設的結果。代碼如下:
我們看方法中的第二個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就先介紹到這裡,當然它還有很多強大的功能,在這裡並沒有一一展開的去講。如有疑問,歡迎評論區留言哦~
※技術分享:Golang並發編程
※使用Elasticsearch搭建一個文件搜索系統
TAG:千鋒JAVA開發學院 |