Zuul 簡介
Zuul 微服務網關是為Spring Cloud Netflix提供動態路由,監控,彈性,安全等服務的框架。可以和Eureka、Ribbon、Hystrix等組件配合使用。
Zuul 主要功能
1、 身份認證與安全:識別每個資源的驗證要求,並拒絕那些與要求不符的請求。
2、審查與監控:在邊緣位置追蹤有意義的數據和統計結果,從而為我們帶來精確的生產視圖。
3、動態路由:動態地將請求路由到不同的后端集群;
4、壓力測試:逐漸增加指向集群的流量,以了解性能;
5、為每一種負載類型分配對應容量,並棄用超出限定值的請求;
Zuul 帶了什么優勢
沒有使用網關服務的時候:
1、客戶端會多次請求不同的微服務,增加了客戶端的復雜性。
2、存在跨域請求,在一定場景下處理相對復雜。
3、認證復雜,每個服務都需要獨立認證。
使用服務網關后:
1、易於監控,可在微服務網關收集監控數據並將其推送到外部系統進行分析。
2、易於認證,可在微服務網關上進行認證,然后再將請求轉發到后端的微服務,而無須在每個微服務中進行認證。
3、減少了客戶端與各個微服務之間的交互次數。
Zuul的高可用
zuul的高可用分為兩種,一種是將zuul的客戶端與服務端同時注冊到了Eureka上,不過現實中這種場景並不多見。
zuul的第二種高可用,客戶端不注冊到Eureka上,客戶端通過Nginx等進行負載均衡。
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=