在Spring-Cloud-Gateway初始化時我們在GatewayAutoConfiguration配置中看到了有初始化加載GatewayProperties實例的配置,接下來學(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)的過濾器定義列表
* 加載配置 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)過濾器定義配置,列表形式
- spring.cloud.gateway.streamingMediaTypes:網(wǎng)關(guān)網(wǎng)絡(luò)媒體類型,列表形式
同時,我們看到代碼中的routes其實RouteDefinition集合,defaultFilters是FilterDefinition集合,在Spring-Cloud-Gateway之route數(shù)據(jù)模型我們已經(jīng)分析了這兩個數(shù)據(jù)模型所有的字段含義以及類型了。通過數(shù)據(jù)模型以及代碼可以看出配置中可以包含的具體信息。
- spring.cloud.gateway.routes
- id:路由ID 編號,唯一
- uri: 路由指向的URI
- order: 順序
- predicates:謂語數(shù)組,列表形式
- spring.cloud.gateway.default-filters
- name:過濾器定義名稱
- args: 參數(shù)
接下來看下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ù),它接收一個text字符串解析字符傳并創(chuàng)建實例信息。同樣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]);
}
}
上面的配置可以很容易的知道最終加載出來GatewayProperties實例中都包含哪些信息。
弄懂了配置的具體加載以及初始化會加深對網(wǎng)關(guān)整體流程的理解,合理的使用配置文件定義我們自己的需求,快速的根據(jù)配置定位,了解服務(wù)的詳細情況