springcloud入門之路由閘道器zuul
在前幾篇springcloud的學習中,我們分別嘗試搭建了一個分散式專案架構的基礎模組,使用eureka實現服務的註冊與發現的服務註冊中心eureka-sercer和服務提供者eureka-client,使用ribbon或feign支援服務的呼叫和負載均衡的service-ribbon和service-feign,hystrix處理服務的熔斷防止故障擴散,Spring Cloud Config服務叢集配置中心的config-server和config-client。最後缺少一個用於外部的應用如何來訪問內部各種各樣的微服務功能的實現,一般來說後端服務往往不直接開放給呼叫端,而是通過一個API閘道器根據請求的url,路由到相應的服務。當新增API閘道器後,在第三方呼叫端和服務提供方之間就建立了一面牆,這面牆直接與呼叫方通訊進行許可權控制,後將請求均衡分發給後臺服務端。
Spring Cloud Zuul路由是微服務架構的不可或缺的一部分,提供動態路由,監控,彈性,安全等的邊緣服務。Zuul是Netflix出品的一個基於JVM路由和服務端的負載均衡器。
下面開始建立一個簡單的springcloud zuul工程
1.新建一個springboot專案service-zuul,依賴選擇eureka、zuul、web
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId >spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
<dependency>
<groupId >org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.在啟動類Application加上註解@EnableZuulProxy開啟zuul功能
@EnableZuulProxy
@EnableEurekaClient
@SpringBootApplication
public class ServiceZuulApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceZuulApplication.class, args);
}
}
zuul工程同時也要作為服務註冊到eureka註冊中心去,所以還要加上註解@EnableEurekaClient
3.在application.yml配置檔案中配置zuul屬性和註冊中心地址等
eureka:
client:
serviceUrl:
defaultZone: http://localhost:1111/eureka/
server:
port: 9003
spring:
application:
name: service-zuul
zuul:
routes:
api-a:
path: /api-a/**
serviceId: SERVICE-FEIGN
api-b:
path: /api-b/**
serviceId: SERVICE-RIBBON
注:SERVICE-FEIGN和SERVICE-RIBBON都是註冊到eureka中的服務名稱,通過訪問url :localhost:rureka埠 地址可以檢視到註冊到註冊中心的服務名稱。
通過配置,以/api-a/ 開頭的請求都轉發給SERVICE-FEIGN服務;以/api-b/開頭的請求都轉發給SERVICE-RIBBON服務
啟動順序:
1.啟動server-eureka註冊中心
2.啟動服務client:eureka-client
3.啟動服務消費者:service-ribbon和service-feign
4.啟動zuul工程:service-zuul
注:spring cloud zuul已經幫我們做了預設配置。預設情況下,Zuul會代理所有註冊到Eureka Server的微服務,並且Zuul的路由規則如下:
http://ZUUL_HOST:ZUUL_PORT/微服務在Eureka上的serviceId/**
會被轉發到serviceId對應的微服務。也就是當相同一個專案實現了叢集佈置切註冊的服務名一樣時,在zuul中會自動實現負載均衡的功能。