This is an automated email from the ASF dual-hosted git repository.
liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
The following commit(s) were added to refs/heads/master by this push:
new 91af6cf [SCB-2118]servicecomb.references.version-rule not work (#2052)
91af6cf is described below
commit 91af6cf2e0b7c65ece69b77f52329e5f7f80ce73
Author: bao liu <[email protected]>
AuthorDate: Fri Nov 13 09:10:44 2020 +0800
[SCB-2118]servicecomb.references.version-rule not work (#2052)
---
.../core/definition/MicroserviceConfig.java | 6 ++---
.../OperationInstancesDiscoveryFilter.java | 27 ++++++++++++++++++----
.../servicecomb/demo/edge/business/Impl.java | 3 +--
.../servicecomb/demo/edge/business/Impl.java | 3 +--
.../servicecomb/demo/edge/business/Impl.java | 3 +--
.../servicecomb/demo/edge/consumer/Consumer.java | 16 ++++++-------
.../consumer/src/main/resources/microservice.yaml | 4 +++-
7 files changed, 39 insertions(+), 23 deletions(-)
diff --git
a/core/src/main/java/org/apache/servicecomb/core/definition/MicroserviceConfig.java
b/core/src/main/java/org/apache/servicecomb/core/definition/MicroserviceConfig.java
index 82a675e..68f58b6 100644
---
a/core/src/main/java/org/apache/servicecomb/core/definition/MicroserviceConfig.java
+++
b/core/src/main/java/org/apache/servicecomb/core/definition/MicroserviceConfig.java
@@ -23,9 +23,9 @@ import
org.apache.servicecomb.registry.version.VersionRuleUtils;
@InjectProperties(prefix = "servicecomb")
public class MicroserviceConfig {
@InjectProperty(keys = {
- "servicecomb.references.version-rule.${service}",
- "servicecomb.references.${service}.version-rule", // Deprecated
- "servicecomb.references.version-rule"
+ "references.version-rule.${service}",
+ "references.${service}.version-rule", // Deprecated
+ "references.version-rule"
}, defaultValue = "0.0.0.0+")
private String versionRule;
diff --git
a/core/src/main/java/org/apache/servicecomb/core/registry/discovery/OperationInstancesDiscoveryFilter.java
b/core/src/main/java/org/apache/servicecomb/core/registry/discovery/OperationInstancesDiscoveryFilter.java
index 7dea7de..a61b353 100644
---
a/core/src/main/java/org/apache/servicecomb/core/registry/discovery/OperationInstancesDiscoveryFilter.java
+++
b/core/src/main/java/org/apache/servicecomb/core/registry/discovery/OperationInstancesDiscoveryFilter.java
@@ -29,8 +29,11 @@ import org.apache.servicecomb.core.definition.CoreMetaUtils;
import org.apache.servicecomb.core.definition.MicroserviceMeta;
import org.apache.servicecomb.core.definition.OperationMeta;
import org.apache.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
+import org.apache.servicecomb.registry.DiscoveryManager;
import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
+import org.apache.servicecomb.registry.consumer.AppManager;
import org.apache.servicecomb.registry.consumer.MicroserviceVersion;
+import org.apache.servicecomb.registry.consumer.MicroserviceVersions;
import org.apache.servicecomb.registry.discovery.AbstractDiscoveryFilter;
import org.apache.servicecomb.registry.discovery.DiscoveryContext;
import org.apache.servicecomb.registry.discovery.DiscoveryTreeNode;
@@ -65,7 +68,6 @@ import com.netflix.config.DynamicPropertyFactory;
* {"i3": instance-i3}, {"i4": instance-i4}, {"i5": instance-i5}
* },
* }
- * ms1.s1.o1 and ms1.s1.o2 should share the same map instance
*
* that means, if invoke o1 or o2, can use 5 instances, but if invoke o3,
can only use 3 instances
* by this filter, we can make sure that new operations will not route to
old instances
@@ -98,10 +100,7 @@ public class OperationInstancesDiscoveryFilter extends
AbstractDiscoveryFilter {
public void init(DiscoveryContext context, DiscoveryTreeNode parent) {
Invocation invocation = context.getInputParameters();
// sort versions
- List<MicroserviceVersion> microserviceVersions =
CoreMetaUtils.getMicroserviceVersions(invocation)
- .getVersions().values().stream()
- .sorted(Comparator.comparing(MicroserviceVersion::getVersion))
- .collect(Collectors.toList());
+ List<MicroserviceVersion> microserviceVersions =
sortedMicroserviceVersion(invocation, parent.data());
Map<String, DiscoveryTreeNode> operationNodes = new
ConcurrentHashMapEx<>();
for (MicroserviceVersion microserviceVersion : microserviceVersions) {
@@ -126,6 +125,24 @@ public class OperationInstancesDiscoveryFilter extends
AbstractDiscoveryFilter {
parent.children(operationNodes);
}
+ protected List<MicroserviceVersion> sortedMicroserviceVersion(Invocation
invocation,
+ Map<String, MicroserviceInstance> instances) {
+ OperationMeta latestOperationMeta = invocation.getOperationMeta();
+ MicroserviceMeta latestMicroserviceMeta =
latestOperationMeta.getSchemaMeta().getMicroserviceMeta();
+ AppManager appManager = DiscoveryManager.INSTANCE.getAppManager();
+ MicroserviceVersions microserviceVersions =
+
appManager.getOrCreateMicroserviceVersions(latestMicroserviceMeta.getAppId(),
+ latestMicroserviceMeta.getMicroserviceName());
+
+ Map<String, MicroserviceVersion> uniqueMicroserviceVersion = new
HashMap<>();
+ for (MicroserviceInstance instance : instances.values()) {
+ MicroserviceVersion microserviceVersion =
microserviceVersions.getVersion(instance.getServiceId());
+ uniqueMicroserviceVersion.put(instance.getServiceId(),
microserviceVersion);
+ }
+ return
uniqueMicroserviceVersion.values().stream().sorted(Comparator.comparing(MicroserviceVersion::getVersion))
+ .collect(Collectors.toList());
+ }
+
private DiscoveryTreeNode createOperationNode(DiscoveryTreeNode parent,
MicroserviceVersion microserviceVersion) {
VersionRule versionRule =
VersionRuleUtils.getOrCreate(microserviceVersion.getVersion().getVersion() +
"+");
return new DiscoveryTreeNode()
diff --git
a/demo/demo-edge/business-1-1-0/src/main/java/org/apache/servicecomb/demo/edge/business/Impl.java
b/demo/demo-edge/business-1-1-0/src/main/java/org/apache/servicecomb/demo/edge/business/Impl.java
index 3ff5cd1..0c5c18e 100644
---
a/demo/demo-edge/business-1-1-0/src/main/java/org/apache/servicecomb/demo/edge/business/Impl.java
+++
b/demo/demo-edge/business-1-1-0/src/main/java/org/apache/servicecomb/demo/edge/business/Impl.java
@@ -17,7 +17,6 @@
package org.apache.servicecomb.demo.edge.business;
-import org.apache.commons.lang.StringUtils;
import org.apache.servicecomb.demo.edge.model.AppClientDataRsp;
import org.apache.servicecomb.demo.edge.model.ChannelRequestBase;
import org.apache.servicecomb.demo.edge.model.ResultWithInstance;
@@ -32,7 +31,7 @@ public class Impl {
@RequestMapping(path = "/channel/news/subscribe", method =
RequestMethod.POST)
public AppClientDataRsp subscribeNewsColumn(@RequestBody ChannelRequestBase
request) {
AppClientDataRsp response = new AppClientDataRsp();
- String rsp = StringUtils.rightPad("edge test", 1024, "*");
+ String rsp = "result from 1.1.0";
response.setRsp(rsp);
return response;
}
diff --git
a/demo/demo-edge/business-1.0.0/src/main/java/org/apache/servicecomb/demo/edge/business/Impl.java
b/demo/demo-edge/business-1.0.0/src/main/java/org/apache/servicecomb/demo/edge/business/Impl.java
index 1322db0..9ce3869 100644
---
a/demo/demo-edge/business-1.0.0/src/main/java/org/apache/servicecomb/demo/edge/business/Impl.java
+++
b/demo/demo-edge/business-1.0.0/src/main/java/org/apache/servicecomb/demo/edge/business/Impl.java
@@ -17,7 +17,6 @@
package org.apache.servicecomb.demo.edge.business;
-import org.apache.commons.lang.StringUtils;
import org.apache.servicecomb.demo.edge.model.AppClientDataRsp;
import org.apache.servicecomb.demo.edge.model.ChannelRequestBase;
import org.apache.servicecomb.demo.edge.model.ResultWithInstance;
@@ -32,7 +31,7 @@ public class Impl {
@RequestMapping(path = "/channel/news/subscribe", method =
RequestMethod.POST)
public AppClientDataRsp subscribeNewsColumn(@RequestBody ChannelRequestBase
request) {
AppClientDataRsp response = new AppClientDataRsp();
- String rsp = StringUtils.rightPad("edge test", 1024, "*");
+ String rsp = "result from 1.0.0";
response.setRsp(rsp);
return response;
}
diff --git
a/demo/demo-edge/business-2.0.0/src/main/java/org/apache/servicecomb/demo/edge/business/Impl.java
b/demo/demo-edge/business-2.0.0/src/main/java/org/apache/servicecomb/demo/edge/business/Impl.java
index 335d368..0462597 100644
---
a/demo/demo-edge/business-2.0.0/src/main/java/org/apache/servicecomb/demo/edge/business/Impl.java
+++
b/demo/demo-edge/business-2.0.0/src/main/java/org/apache/servicecomb/demo/edge/business/Impl.java
@@ -25,7 +25,6 @@ import java.io.RandomAccessFile;
import java.nio.charset.StandardCharsets;
import org.apache.commons.io.FileUtils;
-import org.apache.commons.lang.StringUtils;
import org.apache.servicecomb.demo.edge.model.AppClientDataRsp;
import org.apache.servicecomb.demo.edge.model.ChannelRequestBase;
import org.apache.servicecomb.demo.edge.model.DependTypeA;
@@ -57,7 +56,7 @@ public class Impl {
@RequestMapping(path = "/channel/news/subscribe", method =
RequestMethod.POST)
public AppClientDataRsp subscribeNewsColumn(@RequestBody ChannelRequestBase
request) {
AppClientDataRsp response = new AppClientDataRsp();
- String rsp = StringUtils.rightPad("edge test", 1024, "*");
+ String rsp = "result from 2.0.0";
response.setRsp(rsp);
return response;
}
diff --git
a/demo/demo-edge/consumer/src/main/java/org/apache/servicecomb/demo/edge/consumer/Consumer.java
b/demo/demo-edge/consumer/src/main/java/org/apache/servicecomb/demo/edge/consumer/Consumer.java
index fa43ba9..6d00edb 100644
---
a/demo/demo-edge/consumer/src/main/java/org/apache/servicecomb/demo/edge/consumer/Consumer.java
+++
b/demo/demo-edge/consumer/src/main/java/org/apache/servicecomb/demo/edge/consumer/Consumer.java
@@ -284,16 +284,16 @@ public class Consumer {
}
protected void invokeBusiness(String urlPrefix, ChannelRequestBase request) {
- String url = urlPrefix + "/channel/news/subscribe";
+ for (int i = 0; i < 3; i++) {
+ String url = urlPrefix + "/channel/news/subscribe";
- HttpHeaders headers = new HttpHeaders();
- headers.setContentType(MediaType.APPLICATION_JSON);
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.APPLICATION_JSON);
- HttpEntity<ChannelRequestBase> entity = new HttpEntity<>(request, headers);
+ HttpEntity<ChannelRequestBase> entity = new HttpEntity<>(request,
headers);
- ResponseEntity<AppClientDataRsp> response = template.postForEntity(url,
entity, AppClientDataRsp.class);
- System.out.println("urlPrefix: " + urlPrefix);
- System.out.println(response.getHeaders());
- System.out.println(response.getBody().toString());
+ ResponseEntity<AppClientDataRsp> response = template.postForEntity(url,
entity, AppClientDataRsp.class);
+ Assert.isTrue(response.getBody().getRsp().equals("result from 1.1.0"),
response.getBody().getRsp());
+ }
}
}
diff --git a/demo/demo-edge/consumer/src/main/resources/microservice.yaml
b/demo/demo-edge/consumer/src/main/resources/microservice.yaml
index 6a0fc8d..660dfbf 100644
--- a/demo/demo-edge/consumer/src/main/resources/microservice.yaml
+++ b/demo/demo-edge/consumer/src/main/resources/microservice.yaml
@@ -28,4 +28,6 @@ servicecomb:
handler:
chain:
Consumer:
- default: loadbalance
\ No newline at end of file
+ default: loadbalance
+ references:
+ version-rule: 1.1.0
\ No newline at end of file