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