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/07/30 11:42:59 UTC

[servicecomb-java-chassis] 02/04: [SCB-2043] flow control support custom

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

commit e414f5709efa4f6b0e464a62aab8235d26c94d8f
Author: GuoYL <gy...@gmail.com>
AuthorDate: Mon Jul 27 19:34:44 2020 +0800

    [SCB-2043] flow control support custom
---
 .../main/java/org/apache/servicecomb/qps/QpsControllerManager.java  | 6 ++++++
 .../main/java/org/apache/servicecomb/qps/strategy/StrategyType.java | 3 ++-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/QpsControllerManager.java b/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/QpsControllerManager.java
index 40e25c5..606b642 100644
--- a/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/QpsControllerManager.java
+++ b/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/QpsControllerManager.java
@@ -22,6 +22,7 @@ import java.util.Map.Entry;
 
 import org.apache.servicecomb.core.Invocation;
 import org.apache.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
+import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils;
 import org.apache.servicecomb.qps.strategy.AbstractQpsStrategy;
 import org.apache.servicecomb.qps.strategy.FixedWindowStrategy;
 import org.apache.servicecomb.qps.strategy.LeakyBucketStrategy;
@@ -211,6 +212,8 @@ public class QpsControllerManager {
   private AbstractQpsStrategy chooseStrategy(String globalConfigKey, Long limit, Long bucket,
       String strategyKey) {
     AbstractQpsStrategy strategy;
+    AbstractQpsStrategy customStrategy = SPIServiceUtils
+        .getTargetService(AbstractQpsStrategy.class);
     switch (StrategyType.parseStrategyType(strategyKey)) {
       case FixedWindow:
         strategy = new FixedWindowStrategy(globalConfigKey, limit);
@@ -221,6 +224,9 @@ public class QpsControllerManager {
       case TokenBucket:
         strategy = new TokenBucketStrategy(globalConfigKey, limit, bucket);
         break;
+      case Custom:
+        strategy = customStrategy;
+        break;
       case SlidingWindow:
       default:
         strategy = new FixedWindowStrategy(globalConfigKey, limit);
diff --git a/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/strategy/StrategyType.java b/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/strategy/StrategyType.java
index 98d3764..7412b0a 100644
--- a/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/strategy/StrategyType.java
+++ b/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/strategy/StrategyType.java
@@ -23,7 +23,8 @@ public enum StrategyType {
   TokenBucket,
   LeakyBucket,
   FixedWindow,
-  SlidingWindow;
+  SlidingWindow,
+  Custom;
 
 
   public static StrategyType parseStrategyType(String type) {