springCloud(13):使用Zuul構建微服務網關-簡介

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,能夠獲取正經常使用戶數據

   wKioL1mb41jhrr5fAAAq_NvotDs241.png

三、關閉provide-user微服務,再訪問http://localhost:5016/hystrix-consumer-movie/user/1

 wKioL1mb4sPgMmL1AAArgLGNT7I035.png

四、訪問http://localhost:5013/hystrix.stream進入Hystrix Dashboard頁面,在URL欄輸入http://localhost:5016/hystrix.stream,隨意指定一個title,點擊monitor Stream按鈕。

wKiom1mb5NKC9UYqAACVfogWGZA230.png

總結:說明Zuul已經整合了Hystrix。

相關文章
相關標籤/搜索