1. 程式人生 > >SpringCloud入門(七): Zuul 簡介與使用

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=

&n