在Spring-Cloud-Gateway初始化時(shí)我們?cè)贕atewayAutoConfiguration配置中看到了有初始化加載GatewayProperties實(shí)例的配置坏瘩,接下來(lái)學(xué)習(xí)下GatewayProperties都加載了哪些信息
GatewayAutoConfiguration中我看到加載GatewayProperties如下:
//加載配置beans
// ConfigurationProperty beans
@Bean
public GatewayProperties gatewayProperties() {
return new GatewayProperties();
}
GatewayProperties的代碼如下:
/**
* 網(wǎng)關(guān)配置信息加載
* 從appliccation.yml中解析前綴為spring.cloud.gateway的配置
* @author Spencer Gibb
*/
@ConfigurationProperties("spring.cloud.gateway")
@Validated
public class GatewayProperties {
/**
* 路由定義列表
* 加載配置key=spring.cloud.gateway.routes 列表
* List of Routes
*/
@NotNull
@Valid
private List<RouteDefinition> routes = new ArrayList<>();
/**
* 默認(rèn)的過(guò)濾器定義列表
* 加載配置 key = spring.cloud.gateway.default-filters 列表
* List of filter definitions that are applied to every route.
*/
private List<FilterDefinition> defaultFilters = new ArrayList<>();
/**
* 網(wǎng)媒體類型列表
* 加載配置 key = spring.cloud.gateway.streamingMediaTypes 列表
* 默認(rèn)包含{text/event-stream,application/stream+json}
*/
private List<MediaType> streamingMediaTypes = Arrays.asList(MediaType.TEXT_EVENT_STREAM,
MediaType.APPLICATION_STREAM_JSON);
}
由GatewayProperties代碼可以看出其包含如下配置信息
- spring.cloud.gateway.routes:網(wǎng)關(guān)路由定義配置装畅,列表形式
- spring.cloud.gateway.default-filters: 網(wǎng)關(guān)默認(rèn)過(guò)濾器定義配置,列表形式
- spring.cloud.gateway.streamingMediaTypes:網(wǎng)關(guān)網(wǎng)絡(luò)媒體類型狈癞,列表形式
同時(shí)履羞,我們看到代碼中的routes其實(shí)RouteDefinition集合峦萎,defaultFilters是FilterDefinition集合屡久,在Spring-Cloud-Gateway之route數(shù)據(jù)模型我們已經(jīng)分析了這兩個(gè)數(shù)據(jù)模型所有的字段含義以及類型了忆首。通過(guò)數(shù)據(jù)模型以及代碼可以看出配置中可以包含的具體信息。
- spring.cloud.gateway.routes
- id:路由ID 編號(hào)被环,唯一
- uri: 路由指向的URI
- order: 順序
- predicates:謂語(yǔ)數(shù)組糙及,列表形式
- spring.cloud.gateway.default-filters
- name:過(guò)濾器定義名稱
- args: 參數(shù)
接下來(lái)看下Spring-Cloud-Gateway給的樣例工程(spring-cloud-gateway-sample)中的配置
spring:
cloud:
gateway:
default-filters:
- PrefixPath=/httpbin
- AddResponseHeader=X-Response-Default-Foo, Default-Bar
routes:
- id: websocket_test
uri: ws://localhost:9000
order: 9000
predicates:
- Path=/echo
- id: default_path_to_httpbin
uri: ${test.uri}
order: 10000
predicates:
- Path=/**
- 備注
default-filters下配置PrefixPath=/httpbin字符串,可以查看FilterDefinition中構(gòu)造函數(shù)筛欢,它接收一個(gè)text字符串解析字符傳并創(chuàng)建實(shí)例信息浸锨。同樣predicates配置與其一致唇聘。
字符傳格式:name=param1,param2,param3.....。
如下:
public FilterDefinition(String text) {
int eqIdx = text.indexOf("=");
if (eqIdx <= 0) {
setName(text);
return;
}
setName(text.substring(0, eqIdx));
String[] args = tokenizeToStringArray(text.substring(eqIdx+1), ",");
for (int i=0; i < args.length; i++) {
this.args.put(NameUtils.generateName(i), args[i]);
}
}
上面的配置可以很容易的知道最終加載出來(lái)GatewayProperties實(shí)例中都包含哪些信息柱搜。
弄懂了配置的具體加載以及初始化會(huì)加深對(duì)網(wǎng)關(guān)整體流程的理解迟郎,合理的使用配置文件定義我們自己的需求,快速的根據(jù)配置定位聪蘸,了解服務(wù)的詳細(xì)情況