1 zuul網關
1.1 新建工程
填寫基本信息:
添加Zuul依賴
1.2 編寫配置
server:
port: 10010 #服務端口
spring:
application:
name: api-gateway #指定服務名
1.3 編寫引導類
通過@EnableZuulProxy註解開啓Zuul的功能:
@SpringBootApplication
@EnableZuulProxy // 開啓網關功能
public class ItcastZuulApplication {
public static void main(String[] args) {
SpringApplication.run(ItcastZuulApplication.class, args);
}
}
1.4 編寫路由規則
我們需要用Zuul來代理service-provider服務,先看一下控制面板中的服務狀態:
- ip爲:127.0.0.1
- 端口爲:8081
映射規則:
server:
port: 10010 #服務端口
spring:
application:
name: api-gateway #指定服務名
zuul:
routes:
service-provider: # 這裏是路由id,隨意寫
path: /service-provider/** # 這裏是映射路徑
url: http://127.0.0.1:8081 # 映射路徑對應的實際url地址
我們將符合path 規則的一切請求,都代理到 url參數指定的地址
本例中,我們將 /service-provider/**開頭的請求,代理到http://127.0.0.1:8081
1.5 啓動測試
訪問的路徑中需要加上配置規則的映射路徑,我們訪問:http://127.0.0.1:10010/service-provider/user/1
2. 面向服務的路由
在剛纔的路由規則中,我們把路徑對應的服務地址寫死了!如果同一服務有多個實例的話,這樣做顯然就不合理了。我們應該根據服務的名稱,去Eureka註冊中心查找 服務對應的所有實例列表,然後進行動態路由纔對!
對itcast-zuul工程修改優化:
2.1 添加Eureka客戶端依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2.2 添加Eureka配置,獲取服務信息
eureka:
client:
registry-fetch-interval-seconds: 5 # 獲取服務列表的週期:5s
service-url:
defaultZone: http://127.0.0.1:10086/eureka
2.3 開啓Eureka客戶端發現功能
@SpringBootApplication
@EnableZuulProxy // 開啓Zuul的網關功能
@EnableDiscoveryClient
public class ZuulDemoApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulDemoApplication.class, args);
}
}
2.4 修改映射配置,通過服務名稱獲取
zuul:
routes:
service-provider: # 這裏是路由id,隨意寫
path: /service-provider/** # 這裏是映射路徑
serviceId: service-provider # 指定服務名稱
2.5 啓動測試
再次啓動,這次Zuul進行代理時,會利用Ribbon進行負載均衡訪問
3 簡化的路由配置
在剛纔的配置中,我們的規則是這樣的:
- zuul.routes..path=/xxx/**: 來指定映射路徑。是自定義的路由名
- zuul.routes..serviceId=service-provider:來指定服務名。
而大多數情況下,我們的路由名稱往往和服務名會寫成一樣的。因此Zuul就提供了一種簡化的配置語法:zuul.routes.=
比方說上面我們關於service-provider的配置可以簡化爲一條:
zuul:
routes:
service-provider: /service-provider/** # 這裏是映射路徑
省去了對服務名稱的配置。
4 默認的路由規則
在使用Zuul的過程中,上面講述的規則已經大大的簡化了配置項。但是當服務較多時,配置也是比較繁瑣的。因此Zuul就指定了默認的路由規則:
- 默認情況下,一切服務的映射路徑就是服務名本身。例如服務名爲:service-provider,則默認的映射路徑就 是:/service-provider/**
也就是說,剛纔的映射規則我們完全不配置也是OK的,不信就試試看
5 路由前綴
配置示例:
zuul:
routes:
service-provider: /service-provider/**
service-consumer: /service-consumer/**
prefix: /api # 添加路由前綴
我們通過zuul.prefix=/api來指定了路由的前綴,這樣在發起請求時,路徑就要以/api開頭。