Skip to content

Commit

Permalink
SCB-352 refactor QpsControllerManager, support operation level qps fl…
Browse files Browse the repository at this point in the history
…ow control on provider side
  • Loading branch information
yhs0092 committed Mar 7, 2018
1 parent 6f62b75 commit bc04967
Show file tree
Hide file tree
Showing 11 changed files with 555 additions and 486 deletions.
55 changes: 30 additions & 25 deletions handlers/handler-flowcontrol-qps/pom.xml
Expand Up @@ -16,29 +16,34 @@
-->

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.servicecomb</groupId>
<artifactId>handlers</artifactId>
<version>1.0.0-m1</version>
</parent>
<artifactId>handler-flowcontrol-qps</artifactId>
<name>Java Chassis::Handlers::Flow Control QPS</name>
<dependencies>
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>java-chassis-core</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.servicecomb</groupId>
<artifactId>handlers</artifactId>
<version>1.0.0-m1</version>
</parent>
<artifactId>handler-flowcontrol-qps</artifactId>
<name>Java Chassis::Handlers::Flow Control QPS</name>
<dependencies>
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>java-chassis-core</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>foundation-test-scaffolding</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>

This file was deleted.

Expand Up @@ -19,18 +19,17 @@

import org.apache.servicecomb.core.Handler;
import org.apache.servicecomb.core.Invocation;
import org.apache.servicecomb.core.definition.OperationMeta;
import org.apache.servicecomb.swagger.invocation.AsyncResponse;
import org.apache.servicecomb.swagger.invocation.exception.CommonExceptionData;
import org.apache.servicecomb.swagger.invocation.exception.InvocationException;

/**
* consumer端针对调用目标的qps控制
* 支持microservice、schema、operation三个级别的控制
*
* For qps flow control on consumer side.
* Support 3 levels of microservice/schema/operation.
*/
public class ConsumerQpsFlowControlHandler implements Handler {
private ConsumerQpsControllerManager qpsControllerMgr = new ConsumerQpsControllerManager();
static final QpsControllerManager qpsControllerMgr = new QpsControllerManager()
.setConfigKeyPrefix(Config.CONSUMER_LIMIT_KEY_PREFIX);

@Override
public void handle(Invocation invocation, AsyncResponse asyncResp) throws Exception {
Expand All @@ -39,10 +38,10 @@ public void handle(Invocation invocation, AsyncResponse asyncResp) throws Except
return;
}

OperationMeta operationMeta = invocation.getOperationMeta();
QpsController qpsController = qpsControllerMgr.getOrCreate(operationMeta);
QpsController qpsController = qpsControllerMgr.getOrCreate(
invocation.getOperationMeta().getMicroserviceQualifiedName());
if (qpsController.isLimitNewRequest()) {
// 429
// return http status 429
CommonExceptionData errorData = new CommonExceptionData("rejected by qps flowcontrol");
asyncResp.consumerFail(
new InvocationException(QpsConst.TOO_MANY_REQUESTS_STATUS, errorData));
Expand Down

This file was deleted.

0 comments on commit bc04967

Please sign in to comment.