zuul的四种路由
面向服務的路由
在剛才的路由規(guī)則中,我們把路徑對應的服務地址寫死了!如果同一服務有多個實例的話,這樣做顯然就不合理了。我們應該根據(jù)服務的名稱,去Eureka注冊中心查找 服務對應的所有實例列表,然后進行動態(tài)路由才對!
對zuul工程修改優(yōu)化:
添加Eureka客戶端依賴
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>添加Eureka配置,獲取服務信息
eureka:client:registry-fetch-interval-seconds: 5 # 獲取服務列表的周期:5sservice-url:defaultZone: http://127.0.0.1:10086/eureka開啟Eureka客戶端發(fā)現(xiàn)功能
@SpringBootApplication @EnableZuulProxy // 開啟Zuul的網(wǎng)關功能 @EnableDiscoveryClient public class ZuulDemoApplication {public static void main(String[] args) {SpringApplication.run(ZuulDemoApplication.class, args);} }修改映射配置,通過服務名稱獲取
因為已經(jīng)有了Eureka客戶端,我們可以從Eureka獲取服務的地址信息,因此映射時無需指定IP地址,而是通過服務名稱來訪問,而且Zuul已經(jīng)集成了Ribbon的負載均衡功能。
zuul:routes:service-provider: # 這里是路由id,隨意寫path: /service-provider/** # 這里是映射路徑serviceId: service-provider # 指定服務名稱啟動測試
再次啟動,這次Zuul進行代理時,會利用Ribbon進行負載均衡訪問:
簡化的路由配置
在剛才的配置中,我們的規(guī)則是這樣的:
-
zuul.routes.<route>.path=/xxx/**: 來指定映射路徑。<route>是自定義的路由名
-
zuul.routes.<route>.serviceId=service-provider:來指定服務名。
而大多數(shù)情況下,我們的<route>路由名稱往往和服務名會寫成一樣的。因此Zuul就提供了一種簡化的配置語法:zuul.routes.<serviceId>=<path>
比方說上面我們關于service-provider的配置可以簡化為一條:
zuul:routes:service-provider: /service-provider/** # 這里是映射路徑省去了對服務名稱的配置。
默認的路由規(guī)則
在使用Zuul的過程中,上面講述的規(guī)則已經(jīng)大大的簡化了配置項。但是當服務較多時,配置也是比較繁瑣的。因此Zuul就指定了默認的路由規(guī)則:
-
默認情況下,一切服務的映射路徑就是服務名本身。例如服務名為:service-provider,則默認的映射路徑就 是:/service-provider/**
也就是說,剛才的映射規(guī)則我們完全不配置也是OK的,不信就試試看。
路由前綴
配置示例:
zuul:routes:service-provider: /service-provider/**service-consumer: /service-consumer/**prefix: /api # 添加路由前綴我們通過zuul.prefix=/api來指定了路由的前綴,這樣在發(fā)起請求時,路徑就要以/api開頭。
?
總結