[SCB-2670] support CSE instance-level configuration query (#3288)
diff --git a/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/model/ConfigurationsRequestFactory.java b/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/model/ConfigurationsRequestFactory.java
index dd766aa..4f2b432 100644
--- a/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/model/ConfigurationsRequestFactory.java
+++ b/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/model/ConfigurationsRequestFactory.java
@@ -30,6 +30,10 @@
private static final String KEY_SERVICE = "service";
+ private static final String KEY_VERSION = "version";
+
+ private static final int VERSION_ORDER = 50;
+
private static final int SERVICE_ORDER = 100;
private static final int APP_ORDER = 200;
@@ -44,6 +48,9 @@
if (configuration.isEnableServiceConfig()) {
result.add(createServiceConfigurationsRequest(configuration));
}
+ if (configuration.isEnableVersionConfig()) {
+ result.add(createVersionConfigurationsRequest(configuration));
+ }
if (configuration.isEnableCustomConfig()) {
result.add(createCustomConfigurationsRequest(configuration));
}
@@ -67,6 +74,16 @@
buildLabelQueryItem(KEY_ENVIRONMENT, configuration.getEnvironment())));
}
+ private static ConfigurationsRequest createVersionConfigurationsRequest(KieConfiguration configuration) {
+ return new ConfigurationsRequest()
+ .setOrder(VERSION_ORDER)
+ .setWithExact(true)
+ .setLabelsQuery(buildLabelQuery(buildLabelQueryItem(KEY_APP, configuration.getAppName()),
+ buildLabelQueryItem(KEY_SERVICE, configuration.getServiceName()),
+ buildLabelQueryItem(KEY_ENVIRONMENT, configuration.getEnvironment()),
+ buildLabelQueryItem(KEY_VERSION, configuration.getVersion())));
+ }
+
private static ConfigurationsRequest createCustomConfigurationsRequest(KieConfiguration configuration) {
return new ConfigurationsRequest()
.setOrder(CUSTOM_ORDER)
diff --git a/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/model/KieConfiguration.java b/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/model/KieConfiguration.java
index 2a8bf4d..9c75f2d 100644
--- a/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/model/KieConfiguration.java
+++ b/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/model/KieConfiguration.java
@@ -32,10 +32,14 @@
private String environment;
+ private String version;
+
private boolean enableAppConfig;
private boolean enableServiceConfig;
+ private boolean enableVersionConfig;
+
private boolean enableCustomConfig;
private String customLabelValue;
@@ -125,6 +129,15 @@
return this;
}
+ public boolean isEnableVersionConfig() {
+ return enableVersionConfig;
+ }
+
+ public KieConfiguration setEnableVersionConfig(boolean enableVersionConfig) {
+ this.enableVersionConfig = enableVersionConfig;
+ return this;
+ }
+
public int getPollingWaitInSeconds() {
return pollingWaitInSeconds;
}
@@ -160,4 +173,13 @@
this.refreshIntervalInMillis = refreshIntervallnMillis;
return this;
}
+
+ public String getVersion() {
+ return version;
+ }
+
+ public KieConfiguration setVersion(String version) {
+ this.version = version;
+ return this;
+ }
}
diff --git a/demo/demo-cse-v2/README.md b/demo/demo-cse-v2/README.md
index b5c4890..a9936ec 100644
--- a/demo/demo-cse-v2/README.md
+++ b/demo/demo-cse-v2/README.md
@@ -9,7 +9,7 @@
* 依次启动 provider、consumer、gateway
* 在配置中心增加如下配置:
- * 应用级配置:consumer.yaml。类型为 yaml。
+* 应用级配置:consumer.yaml。类型为 yaml。
```yaml
cse:
@@ -59,6 +59,27 @@
test:
priority: v4
```
+* 应用级配置:consumerApp.yaml,应用选择demo-java-chassis-cse-v2。类型为 yaml。
+```yaml
+cse:
+ v2:
+ test:
+ priority1: v1
+```
+* 服务级配置:consumerSer.yaml,微服务性选择consumer。类型为 yaml。
+```yaml
+cse:
+ v2:
+ test:
+ priority1: v2
+```
+* 版本级配置:consumerIns.yaml,labels: app=demo-java-chassis-cse-v2,environment=,service=consumer,version = 0.0.1。类型为 yaml。
+```yaml
+cse:
+ v2:
+ test:
+ priority1: v3
+```
* 应用级配置: cse.v2.test.bar: bar 。 类型为 text。
@@ -95,4 +116,35 @@
priority: v3
```
-* 执行 tests-client 里面的集成测试用例 (成功)
\ No newline at end of file
+* 执行 tests-client 里面的集成测试用例 (成功)
+* 修改
+ * 应用级consumerApp.yaml。
+```yaml
+cse:
+ v2:
+ test:
+ priority1: v10
+```
+
+* 执行 tests-client 里面的集成测试用例 (成功)
+* 修改
+ * 服务级配置:consumerSer.yaml。
+```yaml
+cse:
+ v2:
+ test:
+ priority1: v20
+```
+
+* 执行 tests-client 里面的集成测试用例 (成功)
+
+* 修改
+ * 版本级配置:consumerIns.yaml。
+```yaml
+cse:
+ v2:
+ test:
+ priority1: v30
+```
+
+* 执行 tests-client 里面的集成测试用例 (失败)
\ No newline at end of file
diff --git a/demo/demo-cse-v2/test-client/src/main/java/org/apache/servicecomb/samples/ConsumerConfigIT.java b/demo/demo-cse-v2/test-client/src/main/java/org/apache/servicecomb/samples/ConsumerConfigIT.java
index 18011c4..8d783d6 100644
--- a/demo/demo-cse-v2/test-client/src/main/java/org/apache/servicecomb/samples/ConsumerConfigIT.java
+++ b/demo/demo-cse-v2/test-client/src/main/java/org/apache/servicecomb/samples/ConsumerConfigIT.java
@@ -43,6 +43,8 @@
TestMgr.check("\"common\"", result);
result = template.getForObject(Config.GATEWAY_URL + "/config?key=cse.v2.test.extra", String.class);
TestMgr.check("\"common\"", result);
+ result = template.getForObject(Config.GATEWAY_URL + "/config?key=cse.v2.test.priority1", String.class);
+ TestMgr.check("\"v3\"", result);
}
private void testFooBar() {
diff --git a/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieConfig.java b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieConfig.java
index 31371cd..f0d1171 100644
--- a/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieConfig.java
+++ b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieConfig.java
@@ -57,6 +57,8 @@
private static final String ENABLE_SERVICE_CONFIG = "servicecomb.kie.enableServiceConfig";
+ private static final String ENABLE_VERSION_CONFIG = "servicecomb.kie.enableVersionConfig";
+
private static final String ENABLE_CUSTOM_CONFIG = "servicecomb.kie.enableCustomConfig";
public static final String FILE_SOURCE = "servicecomb.config.client.fileSource";
@@ -140,6 +142,10 @@
return finalConfig.getBoolean(ENABLE_SERVICE_CONFIG, true);
}
+ public boolean enableVersionConfig() {
+ return finalConfig.getBoolean(ENABLE_VERSION_CONFIG, true);
+ }
+
public boolean enableCustomConfig() {
return finalConfig.getBoolean(ENABLE_CUSTOM_CONFIG, true);
}
diff --git a/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieConfigurationSourceImpl.java b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieConfigurationSourceImpl.java
index 1c0de54..fbf700e 100644
--- a/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieConfigurationSourceImpl.java
+++ b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieConfigurationSourceImpl.java
@@ -117,7 +117,9 @@
.setEnableCustomConfig(KieConfig.INSTANCE.enableCustomConfig())
.setEnableLongPolling(KieConfig.INSTANCE.enableLongPolling())
.setEnableServiceConfig(KieConfig.INSTANCE.enableServiceConfig())
+ .setEnableVersionConfig(KieConfig.INSTANCE.enableVersionConfig())
.setEnvironment(KieConfig.INSTANCE.getEnvironment())
+ .setVersion(KieConfig.INSTANCE.getVersion())
.setPollingWaitInSeconds(KieConfig.INSTANCE.getPollingWaitTime())
.setProject(KieConfig.INSTANCE.getDomainName())
.setRefreshIntervalInMillis(KieConfig.INSTANCE.getRefreshInterval())