You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2020/05/28 01:17:13 UTC

[servicecomb-java-chassis] branch master updated: [SCB-1941] MicroserviceMeta only need to has consumer or producer handlers, not both

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 94002f8  [SCB-1941] MicroserviceMeta only need to has consumer or producer handlers, not both
94002f8 is described below

commit 94002f84ca0817efce37d757367dc4666222462f
Author: wujimin <wu...@huawei.com>
AuthorDate: Wed May 27 15:36:27 2020 +0800

    [SCB-1941] MicroserviceMeta only need to has consumer or producer handlers, not both
---
 .../org/apache/servicecomb/core/Invocation.java    |  3 +--
 .../org/apache/servicecomb/core/SCBEngine.java     |  5 ++---
 .../core/definition/MicroserviceMeta.java          | 25 ++++++++--------------
 .../core/definition/ServiceRegistryListener.java   |  9 ++------
 4 files changed, 14 insertions(+), 28 deletions(-)

diff --git a/core/src/main/java/org/apache/servicecomb/core/Invocation.java b/core/src/main/java/org/apache/servicecomb/core/Invocation.java
index e390e18..55bdbf3 100644
--- a/core/src/main/java/org/apache/servicecomb/core/Invocation.java
+++ b/core/src/main/java/org/apache/servicecomb/core/Invocation.java
@@ -178,8 +178,7 @@ public class Invocation extends SwaggerInvocation {
   }
 
   public List<Handler> getHandlerChain() {
-    return (InvocationType.CONSUMER.equals(invocationType)) ? schemaMeta.getMicroserviceMeta().getConsumerHandlerChain()
-        : schemaMeta.getMicroserviceMeta().getProviderHandlerChain();
+    return schemaMeta.getMicroserviceMeta().getHandlerChain();
   }
 
   public Executor getResponseExecutor() {
diff --git a/core/src/main/java/org/apache/servicecomb/core/SCBEngine.java b/core/src/main/java/org/apache/servicecomb/core/SCBEngine.java
index ac8b860..06a0796 100644
--- a/core/src/main/java/org/apache/servicecomb/core/SCBEngine.java
+++ b/core/src/main/java/org/apache/servicecomb/core/SCBEngine.java
@@ -354,10 +354,9 @@ public class SCBEngine {
 
   private void createProducerMicroserviceMeta() {
     String microserviceName = RegistrationManager.INSTANCE.getMicroservice().getServiceName();
-    List<Handler> consumerHandlerChain = consumerHandlerManager.getOrCreate(microserviceName);
-    List<Handler> producerHandlerChain = producerHandlerManager.getOrCreate(microserviceName);
 
-    producerMicroserviceMeta = new MicroserviceMeta(this, microserviceName, consumerHandlerChain, producerHandlerChain, false);
+    producerMicroserviceMeta = new MicroserviceMeta(this, microserviceName, false);
+    producerMicroserviceMeta.setHandlerChain(producerHandlerManager.getOrCreate(microserviceName));
     producerMicroserviceMeta.setMicroserviceVersionsMeta(new MicroserviceVersionsMeta(this, microserviceName));
   }
 
diff --git a/core/src/main/java/org/apache/servicecomb/core/definition/MicroserviceMeta.java b/core/src/main/java/org/apache/servicecomb/core/definition/MicroserviceMeta.java
index e782b19..74568e2 100644
--- a/core/src/main/java/org/apache/servicecomb/core/definition/MicroserviceMeta.java
+++ b/core/src/main/java/org/apache/servicecomb/core/definition/MicroserviceMeta.java
@@ -62,11 +62,9 @@ public class MicroserviceMeta {
   // key is OperationMeta.getMicroserviceQualifiedName()
   private Map<String, OperationMeta> operationMetas = new HashMap<>();
 
-  private boolean consumer = true;
+  private boolean consumer;
 
-  private List<Handler> consumerHandlerChain;
-
-  private List<Handler> providerHandlerChain;
+  private List<Handler> handlerChain = Collections.singletonList((invocation, ar) -> ar.success(null));
 
   // providerQpsFlowControlHandler is a temporary field, only for internal usage
   private Handler providerQpsFlowControlHandler;
@@ -76,17 +74,13 @@ public class MicroserviceMeta {
 
   private VendorExtensions vendorExtensions = new VendorExtensions();
 
-  public MicroserviceMeta(SCBEngine scbEngine, String microserviceName, List<Handler> consumerHandlerChain,
-      List<Handler> providerHandlerChain, boolean consumer) {
+  public MicroserviceMeta(SCBEngine scbEngine, String microserviceName, boolean consumer) {
     this.scbEngine = scbEngine;
     MicroserviceNameParser parser = scbEngine.parseMicroserviceName(microserviceName);
     this.appId = parser.getAppId();
     this.shortName = parser.getShortName();
     this.microserviceName = parser.getMicroserviceName();
-
-    this.consumerHandlerChain = consumerHandlerChain;
-    this.providerHandlerChain = providerHandlerChain;
-	this.consumer = consumer;
+    this.consumer = consumer;
   }
 
   public MicroserviceConfig getMicroserviceConfig() {
@@ -195,12 +189,12 @@ public class MicroserviceMeta {
     return vendorExtensions.get(key);
   }
 
-  public List<Handler> getConsumerHandlerChain() {
-    return consumerHandlerChain;
+  public List<Handler> getHandlerChain() {
+    return handlerChain;
   }
 
-  public List<Handler> getProviderHandlerChain() {
-    return providerHandlerChain;
+  public void setHandlerChain(List<Handler> handlerChain) {
+    this.handlerChain = handlerChain;
   }
 
   /**
@@ -212,8 +206,7 @@ public class MicroserviceMeta {
       return providerQpsFlowControlHandler;
     }
 
-    List<Handler> providerHandlerChain = getProviderHandlerChain();
-    for (Handler handler : providerHandlerChain) {
+    for (Handler handler : handlerChain) {
       // matching by class name is more or less better than importing an extra maven dependency
       if ("org.apache.servicecomb.qps.ProviderQpsFlowControlHandler".equals(handler.getClass().getName())) {
         providerQpsFlowControlHandler = handler;
diff --git a/core/src/main/java/org/apache/servicecomb/core/definition/ServiceRegistryListener.java b/core/src/main/java/org/apache/servicecomb/core/definition/ServiceRegistryListener.java
index a4ca35a..24ac745 100644
--- a/core/src/main/java/org/apache/servicecomb/core/definition/ServiceRegistryListener.java
+++ b/core/src/main/java/org/apache/servicecomb/core/definition/ServiceRegistryListener.java
@@ -21,9 +21,6 @@ import static org.apache.servicecomb.core.definition.CoreMetaUtils.CORE_MICROSER
 import static org.apache.servicecomb.core.definition.CoreMetaUtils.CORE_MICROSERVICE_VERSIONS_META;
 import static org.apache.servicecomb.core.definition.CoreMetaUtils.getMicroserviceVersionsMeta;
 
-import java.util.List;
-
-import org.apache.servicecomb.core.Handler;
 import org.apache.servicecomb.core.SCBEngine;
 import org.apache.servicecomb.foundation.common.event.EnableExceptionPropagation;
 import org.apache.servicecomb.foundation.common.event.SubscriberOrder;
@@ -77,11 +74,9 @@ public class ServiceRegistryListener {
 
     // not shortName, to support cross app invoke
     String microserviceName = microserviceVersion.getMicroserviceName();
-    List<Handler> consumerHandlerChain = scbEngine.getConsumerHandlerManager().getOrCreate(microserviceName);
-    List<Handler> producerHandlerChain = scbEngine.getProducerHandlerManager().getOrCreate(microserviceName);
 
-    MicroserviceMeta microserviceMeta = new MicroserviceMeta(scbEngine, microserviceName,
-        consumerHandlerChain, producerHandlerChain, true);
+    MicroserviceMeta microserviceMeta = new MicroserviceMeta(scbEngine, microserviceName, true);
+    microserviceMeta.setHandlerChain(scbEngine.getConsumerHandlerManager().getOrCreate(microserviceName));
     MicroserviceVersions microserviceVersions = microserviceVersion.getMicroserviceVersions();
     microserviceMeta.setMicroserviceVersionsMeta(getMicroserviceVersionsMeta(microserviceVersions));