Spring Cloud Gateway入門 - spring.io
微服務架構很棒,但隨著應用程式程式設計介面(API)的開始增長,與維護相關的挑戰也隨之增加。
例如,隨著現有API的成熟和新增新功能,當API的詳細資訊發生變化時,客戶端需要進行調整才能使用這些更改。這個過程需要時間,會真正降低您的API演變效率,並干擾您快速迭代的能力。
提供多個API也會帶來了一系列挑戰。如何將請求和響應路由到正確的API?你如何管理任何訊息差異?當終端發生變化遷移時,您如何為變化的客戶端提供支援?
還有與遺留系統整合的問題。並非所有人都如此幸運,以至於他們可以將應用程式和服務構建到一個全新的生態系統中。
API閘道器可幫助您解決這些問題等。它是一個功能強大的架構工具,可用於管理微服務架構中的訊息路由,過濾和代理。許多API管理閘道器可以追溯到SOA,這些閘道器往往是作為集中式伺服器實現的。但隨著微服務變得越來越流行,現代輕量級獨立和分散式微閘道器應用程式已經出現 - 例如Spring Cloud Gateway。
下面展示使用Spring Cloud Gateway進行開發的步驟
需要的工具:
- HTTPie - http呼叫的命令列客戶端
- 您最喜歡的Java IDE(如果您沒有,請檢視Spring Tools)
- 您最喜歡的命令列(例如zsh,bash,DOS命令或PowerShell)
- Httpbin.org - 一個網站和診斷工具,可將Http GET請求資料轉換為JSON響應
第1步:建立一個專案
在新資料夾中,使用start.spring.io(和HTTPie)下載並提取新的Spring Cloud Gateway專案,如下所示......
http https://start.spring.io/starter.zip dependencies==cloud-gateway,actuator baseDir==spring-cloud-gateway-demo | tar -xzvf - |
執行:
./mvnw package spring-boot:run |
現在您的Spring Boot應用程式已啟動並執行,請將瀏覽器指向http:// localhost:8080 / actuator / health。您應該收到一條JSON格式的訊息{"status":"UP"},說明一切正常。現在停止伺服器(ctrl + c)並繼續下一部分。
步驟2:向閘道器新增重新路由指令
在IDE中,開啟該類src/main/java/com/example/demo/DemoApplication.java並新增以下方法,隨時更正import語句。如果您遇到問題,請檢視此處的程式碼示例。
@Bean public RouteLocator myRoutes(RouteLocatorBuilder builder) { return builder.routes() // Add a simple re-route from: /get to: http://httpbin.org:80 // Add a simple "Hello:World" HTTP Header .route(p -> p .path("/get") // intercept calls to the /get path .filters(f -> f.addRequestHeader("Hello", "World")) // add header .uri("http://httpbin.org:80")) // forward to httpbin .build(); } |
在這裡,我們建立了一條新路由:任何請求http://localhost:8080/get都將與此路由指令匹配,並且我們將對請求進行兩次更改:filters()方法處理諸如新增或更改標題之類的事情,在我們的示例中將Hello標題設定為值World。此外,該uri()方法將我們的請求轉發給新主機。請務必注意/get轉發郵件時保留路徑。
現在編譯新程式碼並再次啟動應用程式伺服器,如下所示......
./mvnw package spring-boot:run
第3步:測試新閘道器
為了測試我們構建的內容,我們可以再次使用HTTPie。將HTTP GET請求傳送到http:// localhost:8080 / get並觀察返回的內容,如下所示...
http localhost:8080/get --print=HhBb
應該看到與下面顯示的響應非常相似的響應:
GET /get HTTP/1.1 Accept: */* Accept-Encoding: gzip, deflate Connection: keep-alive Host: localhost:8080 User-Agent: HTTPie/1.0.2 HTTP/1.1 200 OK Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Content-Encoding: gzip Content-Length: 256 Content-Type: application/json Date: Mon, 10 Jun 2019 13:13:36 GMT Referrer-Policy: no-referrer-when-downgrade Server: nginx X-Content-Type-Options: nosniff X-Frame-Options: DENY X-XSS-Protection: 1; mode=block { "args": {}, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Forwarded": "proto=http;host=\"localhost:8080\"for=\Ŕ:0:0:0:0:0:0:1:52144\"", "Hello": "World", "Host": "httpbin.org", "User-Agent": "HTTPie/1.0.2", "X-Forwarded-Host": "localhost:8080" }, "origin": "0:0:0:0:0:0:0:1, 2.102.147.153, ::1", "url": "https://localhost:8080/get" } |
輸出中有一些注意事項:
- 響應源自httpbin.org,如"Host"標題所示。
- "X-Forwarded-Host"是"localhost:8080"(我們本地執行的應用閘道器)
- "Hello"已插入Http標頭並給出值"World"。
- 在Json響應中,完整"url"的原始請求是"https://localhost:8080/get"(我們一起構建的閘道器服務)。
執行路徑:來自客戶端(HTTPie) - > DemoApplication.java(我們的閘道器) - > httpbin.org(我們的echo服務),然後再返回。
最後的想法
您現在應該啟動並執行Spring Cloud Gateway應用程式,並學習如何將收到的請求轉發到另一個端點。您可以使用此技術自動將請求從Gateway應用程式轉發到任何其他服務。
可以在此處找到本文附帶的程式碼。可在此處找到當前GA版本的Spring Cloud Gateway(撰寫本文時為2.1.0)的完整文件。
相關文章
- Spring Cloud Gateway 入門SpringCloudGateway
- Spring Cloud Gateway 入門案例SpringCloudGateway
- Spring Cloud Gateway (一)入門篇SpringCloudGateway
- Spring Cloud Gateway---GlobalFilter(入門)SpringCloudGatewayFilter
- spring Cloud Gateway 入門簡單使用SpringCloudGateway
- Spring Cloud Gateway入坑記SpringCloudGateway
- 整合spring cloud雲架構 - Gateway的基本入門SpringCloud架構Gateway
- spring cloud微服務分散式雲架構-Gateway入門SpringCloud微服務分散式架構Gateway
- Spring Cloud Stream事件路由 - spring.ioSpringCloud事件路由
- RSocket入門:Spring Boot伺服器 -Spring.ioSpring Boot伺服器
- Spring Cloud Gateway 深入SpringCloudGateway
- Spring cloud 之GatewaySpringCloudGateway
- Spring Cloud Gateway ---GatewayFilter過濾器、過濾器工廠(入門)SpringCloudGatewayFilter過濾器
- Spring Cloud Gateway 限流操作SpringCloudGateway
- Spring Cloud Gateway示例 | DevGlanSpringCloudGatewaydev
- spring cloud gateway 不生效SpringCloudGateway
- spring cloud gateway 之限流篇SpringCloudGateway
- spring cloud gateway之filter篇SpringCloudGatewayFilter
- Spring Cloud Gateway 聚合swagger文件SpringCloudGatewaySwagger
- 聊聊spring cloud gateway的XForwardedHeadersFilterSpringCloudGatewayForwardHeaderFilter
- 快速突擊 Spring Cloud GatewaySpringCloudGateway
- Spring Cloud Gateway使用簡介SpringCloudGateway
- Spring Cloud Gateway初體驗SpringCloudGateway
- Spring Cloud Gateway限流實戰SpringCloudGateway
- Spring Cloud Alibaba入門篇SpringCloud
- Spring Cloud Gateway WebFilter工廠 | BaeldungSpringCloudGatewayWebFilter
- spring-cloud-gateway靜態路由SpringCloudGateway路由
- 阿里Sentinel支援Spring Cloud Gateway啦阿里SpringCloudGateway
- Spring Cloud Gateway 之 過濾器SpringCloudGateway過濾器
- Spring Cloud Gateway之負載均衡SpringCloudGateway負載
- Spring Cloud Gateway之RouteLocator簡介SpringCloudGateway
- Spring Cloud Gateway 實現 gRpc 代理SpringCloudGatewayRPC
- spring-cloud-kubernetes與SpringCloud GatewaySpringCloudGCGateway
- spring cloud 2020 gateway 報錯503SpringCloudGateway
- Spring Cloud Gateway限制API速率 - tanzuSpringCloudGatewayAPI
- Spring Cloud Gateway應用篇(十三)SpringCloudGateway
- Spring Cloud Alibaba(四)--Gateway與SentinelSpringCloudGateway
- Spring Cloud Alibaba(1)---入門篇SpringCloud