SpringCloud入門(七): Zuul 簡介與使用

Zuul 簡介

  Zuul 微服務網關是為Spring Cloud Netflix提供動態路由,監控,彈性,安全等服務的框架。可以和Eureka、Ribbon、Hystrix等組件配合使用。

Zuul 主要功能

  1、 身份認證與安全:識別每個資源的驗證要求,並拒絕那些與要求不符的請求。

  2、審查與監控:在邊緣位置追蹤有意義的數據和統計結果,從而為我們帶來精確的生產視圖。

  3、動態路由:動態地將請求路由到不同的後端集群;

  4、壓力測試:逐漸增加指向集群的流量,以了解性能;

  5、為每一種負載類型分配對應容量,並棄用超出限定值的請求;

Zuul 帶了什麼優勢

  沒有使用網關服務的時候:

  1、客戶端會多次請求不同的微服務,增加了客戶端的複雜性。

  2、存在跨域請求,在一定場景下處理相對複雜。

  3、認證複雜,每個服務都需要獨立認證。

 

  使用服務網關後:

  1、易於監控,可在微服務網關收集監控數據並將其推送到外部系統進行分析。

  2、易於認證,可在微服務網關上進行認證,然後再將請求轉發到後端的微服務,而無須在每個微服務中進行認證。

  3、減少了客戶端與各個微服務之間的交互次數。

 

 Zuul 入門

<!--1. 配置pom文件,引入spring-cloud-starter-netflix-zuul包-->  <dependency>      <groupId>org.springframework.cloud</groupId>      <artifactId>spring-cloud-starter-netflix-zuul</artifactId>  </dependency>    <dependency>      <groupId>org.springframework.cloud</groupId>      <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>  </dependency>    <!-- 2. 配置屬性文件-->  server.port=9004  #註冊到eureka服務端的微服務名稱  spring.application.name=ms-gateway-zuul  #註冊到eureka服務端的地址  eureka.client.service-url.defaultZone=http://localhost:9000/eureka/  #點擊具體的微服務,右下角是否顯示ip  eureka.instance.prefer-ip-address=true  #顯示微服務的名稱  eureka.instance.instance-id=ms-gateway-zuul-9004    <!-- 3. 在Spring的啟動入口添加@EnableZuulProxy註解 -->  @SpringBootApplication  @EnableZuulProxy  public class ZuulApplication {        public static void main(String[] args) {          SpringApplication.run(ZuulApplication.class, args);      }  }

通過Url訪問:http://localhost:9004/zuul/ms-consumer-user/userController/getUserInfo/{loginName}

Zuul 的常規配置

1、設置訪問路徑,默認值為zuul 

  zuul.servlet-path=/zuul

2、關閉通過微服務名稱路訪問(避免暴露服務名稱)

  全部設置:zuul.ignored-services=*  

  分服務設置:zuul.ignored-services=ms-provider-order,ms-consumer-user

3、通過服務實例指定映射路徑

  zuul.routes.ms-provider-order=/order-service/**

  訪問:http://localhost:9004/zuul/order-service/userController/getUserInfo/{loginName}

4、通過服務的serviceId指定映射路徑

  zuul.routes.use-routing.serviceId=ms-provider-order

  zuul.routes.use-routing.path=/order-service/**

5、通過url指定映射路徑(路由不會作為HystrixCommand執行,同時也不能使用Ribbon來負載均衡多個URL)

  zuul.routes.use-routing.url=http://localhost:8004/

  zuul.routes.use-routing.path=/order-service/**

6、統一設置路由前綴

  全局設置:zuul.prefix=/order-api

       zuul.strip-prefix=true(是否剝離前綴,默認是true)

       zuul.routes.use-routing.serviceId=ms-provider-order

       zuul.routes.use-routing.path=/order-service/**

       訪問:http://localhost:9004/order-api/order-service/userController/getUserInfo/{loginName}

  分服務設置:zuul.strip-prefix=true

        zuul.routes.use-routing.serviceId=ms-provider-order

        zuul.routes.use-routing.path=/order-service/**

        zuul.routes.use-routing.stripPrefix=true

        訪問:http://localhost:9004/zuul/order-service/userController/getUserInfo/{loginName}

7、過濾敏感路徑

  zuul.ignored-patterns=/**/admin/**

8、過濾敏感頭信息(通過zuul網關的時候,會過濾掉敏感的頭信息,比如cookie等其他的)

  全局設置:zuul.sensitive-headers=

  分模塊設置:zuul.routes.use-routing.serviceId=ms-provider-order

        zuul.routes.use-routing.path=/order-service/**

        zuul.routes.use-routing.sensitiveHeaders=