Signed-off-by: Eric Zhao <sczyh16@gmail.com>master
@@ -18,15 +18,16 @@ package com.alibaba.csp.sentinel.demo.quarkus; | |||
import com.alibaba.csp.sentinel.slots.block.RuleConstant; | |||
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule; | |||
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRuleManager; | |||
import com.alibaba.csp.sentinel.slots.block.degrade.circuitbreaker.CircuitBreakerStrategy; | |||
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule; | |||
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager; | |||
import com.alibaba.csp.sentinel.slots.system.SystemRule; | |||
import com.alibaba.csp.sentinel.slots.system.SystemRuleManager; | |||
import io.quarkus.runtime.StartupEvent; | |||
import org.jboss.logging.Logger; | |||
import javax.enterprise.context.ApplicationScoped; | |||
import javax.enterprise.event.Observes; | |||
import java.util.Arrays; | |||
/** | |||
@@ -39,31 +40,28 @@ public class AppLifecycleBean { | |||
void onStart(@Observes StartupEvent ev) { | |||
LOGGER.info("The application is starting..."); | |||
FlowRule rule = new FlowRule() | |||
.setCount(1) | |||
.setGrade(RuleConstant.FLOW_GRADE_QPS) | |||
.setResource("GET:/hello/txt") | |||
.setLimitApp("default") | |||
.as(FlowRule.class); | |||
FlowRuleManager.loadRules(Arrays.asList(rule)); | |||
SystemRule systemRule = new SystemRule(); | |||
systemRule.setLimitApp("default"); | |||
systemRule.setAvgRt(3000); | |||
SystemRuleManager.loadRules(Arrays.asList(systemRule)); | |||
// Only for test here. Actually it's recommended to configure rules via data-source. | |||
FlowRule rule1 = new FlowRule() | |||
.setCount(1) | |||
.setGrade(RuleConstant.FLOW_GRADE_QPS) | |||
.setResource("GET:/hello/txt") | |||
.setLimitApp("default") | |||
.as(FlowRule.class); | |||
FlowRule rule2 = new FlowRule("greeting2") | |||
.setCount(1) | |||
.setGrade(RuleConstant.FLOW_GRADE_QPS) | |||
.as(FlowRule.class); | |||
FlowRuleManager.loadRules(Arrays.asList(rule1, rule2)); | |||
DegradeRule degradeRule1 = new DegradeRule("greeting1") | |||
.setCount(1) | |||
.setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT) | |||
.setTimeWindow(10) | |||
.setMinRequestAmount(1); | |||
.setCount(1) | |||
.setGrade(CircuitBreakerStrategy.ERROR_COUNT.getType()) | |||
.setTimeWindow(5) | |||
.setStatIntervalMs(10000) | |||
.setMinRequestAmount(1); | |||
DegradeRule degradeRule2 = new DegradeRule("greeting2") | |||
.setCount(1) | |||
.setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT) | |||
.setTimeWindow(10) | |||
.setMinRequestAmount(1); | |||
DegradeRuleManager.loadRules(Arrays.asList(degradeRule1, degradeRule2)); | |||
DegradeRuleManager.loadRules(Arrays.asList(degradeRule1)); | |||
} | |||
} |
@@ -43,7 +43,7 @@ public class GreetingService { | |||
return "hello " + name; | |||
} | |||
public String greetingFallback(String name) { | |||
return "greetingFallback:" + name; | |||
public String greetingFallback(String name, Throwable t) { | |||
return "greetingFallback: " + t.getClass().getSimpleName(); | |||
} | |||
} |
@@ -15,8 +15,8 @@ | |||
*/ | |||
package com.alibaba.csp.sentinel.demo.quarkus; | |||
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager; | |||
import com.alibaba.csp.sentinel.slots.clusterbuilder.ClusterBuilderSlot; | |||
import io.quarkus.test.junit.QuarkusTest; | |||
import org.junit.jupiter.api.AfterEach; | |||
import org.junit.jupiter.api.Test; | |||
@@ -35,71 +35,60 @@ public class GreetingResourceTest { | |||
@Test | |||
public void testSentinelJaxRsQuarkusAdapter() { | |||
given() | |||
.when().get("/hello/txt") | |||
.then() | |||
.statusCode(200) | |||
.body(is("hello")); | |||
.when().get("/hello/txt") | |||
.then() | |||
.statusCode(200) | |||
.body(is("hello")); | |||
given() | |||
.when().get("/hello/txt") | |||
.then() | |||
.statusCode(javax.ws.rs.core.Response.Status.TOO_MANY_REQUESTS.getStatusCode()) | |||
.body(is("Blocked by Sentinel (flow limiting)")); | |||
.when().get("/hello/txt") | |||
.then() | |||
.statusCode(javax.ws.rs.core.Response.Status.TOO_MANY_REQUESTS.getStatusCode()) | |||
.body(is("Blocked by Sentinel (flow limiting)")); | |||
} | |||
@Test | |||
public void testSentinelAnnotationQuarkusAdapter() { | |||
given() | |||
.when().get("/hello/fallback/a") | |||
.then() | |||
.statusCode(200) | |||
.body(is("hello a")); | |||
given() | |||
.when().get("/hello/fallback/b") | |||
.then() | |||
.statusCode(200) | |||
.body(is("hello b")); | |||
given() | |||
.when().get("/hello/fallback/degrade") | |||
.then() | |||
.statusCode(200) | |||
.body(is("globalDefaultFallback, ex:test sentinel fallback")); | |||
.when().get("/hello/fallback/a") | |||
.then() | |||
.statusCode(200) | |||
.body(is("hello a")); | |||
given() | |||
.when().get("/hello/fallback/degrade") | |||
.then() | |||
.statusCode(200) | |||
.body(is("globalBlockHandler, ex:null")); | |||
.when().get("/hello/fallback/b") | |||
.then() | |||
.statusCode(200) | |||
.body(is("hello b")); | |||
given() | |||
.when().get("/hello/fallback/a") | |||
.then() | |||
.statusCode(200) | |||
.body(is("globalBlockHandler, ex:null")); | |||
.when().get("/hello/fallback/degrade") | |||
.then() | |||
.statusCode(200) | |||
.body(is("globalDefaultFallback, ex:test sentinel fallback")); | |||
given() | |||
.when().get("/hello/fallback2/a") | |||
.then() | |||
.statusCode(200) | |||
.body(is("hello a")); | |||
.when().get("/hello/fallback/degrade") | |||
.then() | |||
.statusCode(200) | |||
.body(is("globalDefaultFallback, ex:test sentinel fallback")); | |||
given() | |||
.when().get("/hello/fallback2/b") | |||
.then() | |||
.statusCode(200) | |||
.body(is("hello b")); | |||
.when().get("/hello/fallback/degrade") | |||
.then() | |||
.statusCode(200) | |||
.body(is("globalBlockHandler, ex:null")); | |||
given() | |||
.when().get("/hello/fallback2/degrade") | |||
.then() | |||
.statusCode(200) | |||
.body(is("greetingFallback:degrade")); | |||
.when().get("/hello/fallback/a") | |||
.then() | |||
.statusCode(200) | |||
.body(is("globalBlockHandler, ex:null")); | |||
given() | |||
.when().get("/hello/fallback2/degrade") | |||
.then() | |||
.statusCode(200) | |||
.body(is("greetingFallback:degrade")); | |||
.when().get("/hello/fallback2/a") | |||
.then() | |||
.statusCode(200) | |||
.body(is("hello a")); | |||
given() | |||
.when().get("/hello/fallback2/a") | |||
.then() | |||
.statusCode(200) | |||
.body(is("greetingFallback:a")); | |||
.when().get("/hello/fallback2/b") | |||
.then() | |||
.statusCode(200) | |||
.body(is("greetingFallback: FlowException")); | |||
} | |||
} |