Zuul的主要功能是路由轉發和過濾器。
路由功能是微服務的一部分,比如/api/user轉發到到user服務,/api/shop轉發到到shop服務。zuul默認和Ribbon結合實現了負載均衡的功能。
引入網關前后調用流程的變化
在微服務架構中,后端服務往往不直接開放給調用端,而是通過一個API網關根據請求的url,路由到相應的服務。網關直接與調用方通信進行權限控制,后將請求均衡分發給后台服務端
引入網關后,調用流程的變化。不使用網關的情況:
引入網關后:
搭建單節點的Zuul
這里會把zuul注冊到Eureka上
創建子Module gateway-zuul
添加maven依賴
<!-- eureka client 依賴 . Eureka不是必須的 ,在沒有注冊中心的情況下,也可以使用zuul--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!-- zuul 依賴 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency>
官方Note: the Zuul starter does not include a discovery client, so, for routes based on service IDs, you need to provide one of those on the classpath as well (Eureka is one choice). 因為我們使用serverID去做路由,所以我們這里引入了Eureka
啟動類添加注解 @EnableZuulProxy
@SpringBootApplication @EnableZuulProxy public class GatewayZuulApplication { public static void main(String[] args) { SpringApplication.run(GatewayZuulApplication.class, args); } }
通過注解@EnableZuulProxy聲明一個zuul代理,代理整合Ribbon來定位注冊在Eureka上的微服務,同時還整合hystrix實現容錯,所有經過zuul的請求都會在Hystrix命令中執行。
配置文件application.yml
server: port: 4534 spring: application: name: gateway-zuul eureka: client: service-url: defaultZone: http://Jim:land123@localhost:8761/eureka instance: instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}
觀察上面的配置文件,是沒有zuul相關的配置的,我們僅僅添加了一個zuul的依賴,同時將zuul注冊到Eureka上。 至此,一個單節點的最精簡版的zuul就搭建完成
網關功能-路由規則測試
1、啟動注冊中心Eureka Server 項目 discovery-eureka
2、啟動服務提供者provider-user
3、啟動服務消費者 consumer-movie-ribbon
4、啟動zuul網關gateway-zuul
驗證下路由轉發的功能
知道zuul服務的啟動端口為 4534 ,通過zuul訪問服務提供者提供的服務看下
http://localhost:4534/provider-user/user/3
通過zuul訪問服務消費者
http://localhost:4534/consumer-movie-ribbon/movie/4
服務被轉發到了consumer-movie-ribbon微服務中
默認情況下,zuul會代理所有注冊在Eureka Server上的微服務,並且Zuul的路由規則為http://zuul_host:zuul_port/微服務在EurekaServer上的serviceId/** 被轉發到serviceId對應的微服務上。
網關功能-負載均衡測試
1、啟動注冊中心Eureka Server 項目 discovery-eureka
2、啟動多個服務提供者provider-user ,在sts中換個端口,可啟動多個,再加個8901端口上的服務
3、啟動服務消費者 consumer-movie-ribbon
4、啟動zuul網關gateway-zuul
訪問兩次服務提供者提供的服務,觀察后台日志
網關功能-Hystrix監控測試
訪問:訪問zuul的hystrix.stream http://localhost:4534/actuator/hystrix.stream