1、爲何要使用微服務網關spring
不一樣的微服務通常會有不一樣的網絡地址,而外部客戶端可能須要調用多個服務的接口才能完成一個業務需求。如:一個電影購票的手機APP,可能會調用多個微服務,才能完成一次購票的業務流程。若是讓客戶端直接與各個微服務通訊,會有如下的問題:後端
一、客戶端會屢次請求不一樣的微服務,增長了客戶端的複雜性;跨域
二、存在跨域請求,在必定場景下處理相對複雜;瀏覽器
三、認證複雜,每一個服務都須要獨立認證;安全
四、難以重構,隨着項目的迭代,可能須要從新劃分微服務,若是客戶端直接與微服務通訊,那麼重構將會很難實施;網絡
五、某些微服務可能使用了防火牆/瀏覽器不友好的協議,直接訪問會有必定的困難。app
以上問題可藉助微服務網關解決,微服務網關是介於客戶端和服務端之間的中間層,全部的外部請求都會先通過微服務網關,而後由微服務網關請求各個微服務。ide
微服務網關封裝了應用程序的內部結構,客戶端只須跟網關交互,而無須直接調用特定微服務的接口,這樣,開發就能夠獲得簡化。不只如此,使用微服務網關還有如下優勢:微服務
一、易於監控。可在微服務網關收集監控數據並將其推送到外部系統進行分析;性能
二、易於認證。可在微服務網關上進行認證,而後再將請求轉發到後端的微服務,而無須再每一個微服務中進行認證;
三、減小了客戶端與各個微服務之間的交互次數。
2、Zuul簡介
Zuul是Netflix開源的微服務網關,它能夠和Eureka、Ribbon、Hystrix等組件配合使用。
Zuul的核心是一系列的過濾器,這些過濾器能夠完成如下功能:
一、身份認證與安全:識別每一個資源的驗證要求,並拒絕那些與要求不符的請求;
二、審查與監控:在邊緣位置追蹤有意義的數據和統計結果,從而帶來精確的生產視圖;
三、動態路由:動態地將請求路由到不一樣的後端集羣;
四、壓力測試:逐漸增長指向集羣的流量,以瞭解性能;
五、負載分配:爲每一種負載類型分配對應容量,並棄用超出限定值的請求;
六、靜態響應處理:在邊緣位置直接創建部分響應,從而避免其轉發到內部集羣;
七、多區域彈性:跨域AWS Region進行請求路由。
Spring Cloud對Zuul進行了整合與加強。目前,Zuul使用的默認HTTP客戶端是Apache HTTP Client。
3、編寫一個Zuul微服務網關
一、添加依賴
<!-- zuul --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zuul</artifactId> </dependency>
二、在啓動類上添加@EnableZuulProxy註解,聲明一個Zuul代理,改代理使用Ribbon來定位註冊在Eureka Server中的微服務;同時,改代理還整合了hystrix,全部通過Zuul的請求都會在Hystrix命令中執行。
三、編寫application.yml
spring: profiles: active: - dev application: name: microservice-gateway-zuul eureka: client: service-url: defaultZone: http://liuy2:5010/eureka/ # 設置與Eureka Server交互的地址,查詢服務和註冊服務都須要依賴這個地址,多個用逗號分隔 instance: prefer-ip-address: true --- spring: profiles: active: dev server: port: 5016
這樣,一個簡單的微服務網關就編寫完成了。這裏僅是添加了Zuul的依賴,並將Zuul註冊到Eureka Server上。
4、測試
4.一、測試路由規則
一、依次啓動eureka-server(4010)、provide-user(4011)、hystrix-consumer-movie(5012)、microservice-gateway-zuul(5016)
二、訪問http://localhost:5016/hystrix-consumer-movie/user/1,請求會被轉發到http://localhost:5012/user/1
三、訪問http://localhost:5016/provide-user/1,請求會被轉發到http://localhost:4011/1
總結:
說明默認狀況下,Zuul會代理全部註冊到Eureka Server的微服務,而且Zuul的路由規則以下:http://ZUUL_HOST:ZUUL_PORT/微服務在Eureka上的serviceId/**會被轉發到serviceId對應的微服務。
4.二、測試Hystrix容錯與監控
一、依次啓動eureka-server(4010)、provide-user(4011)、hystrix-consumer-movie(5012)、microservice-gateway-zuul(5016)、hystrix-dashboard(5013)
二、訪問http://localhost:5016/hystrix-consumer-movie/user/1,能夠獲取正經常使用戶數據
三、關閉provide-user微服務,再訪問http://localhost:5016/hystrix-consumer-movie/user/1
四、訪問http://localhost:5013/hystrix.stream進入Hystrix Dashboard頁面,在URL欄輸入http://localhost:5016/hystrix.stream,隨意指定一個title,點擊monitor Stream按鈕。
總結:說明Zuul已經整合了Hystrix。