alibaba / alibaba/Sentinel

请问这个是我单测写的有问题吗?我限流设置的是1,但是多线程访问进入了线程数的请求。

Open
#3,449 4 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
23.1k
Forks
8.1k
PR merge metrics
No merged PRs in 30d

Description

正常我的理解只会打印一个helloword
/**
* 初始化流控规则
*/
private static void initFlowRules() {

List rules = new ArrayList();
FlowRule rule1 = new FlowRule();
rule1.setResource("HelloWorld");

ClusterFlowConfig config = new ClusterFlowConfig();
config.setFallbackToLocalWhenFail(true);
config.setSampleCount(10);
config.setThresholdType(0);
config.setWindowIntervalMs(1000);
rule1.setClusterConfig(config);
// set limit qps to 20
rule1.setCount(1);
rule1.setStrategy(0);
rule1.setClusterMode(false);
rule1.setControlBehavior(0);
rule1.setGrade(RuleConstant.FLOW_GRADE_QPS);
rule1.setLimitApp("default");
rules.add(rule1);
FlowRuleManager.loadRules(rules);
}

@Test
public void flowRule_TEST() throws InterruptedException {

// 配置规则.
initFlowRules();

for (int j = 0; j < 4; j++) {
new Thread(new Runnable() {
int i = 0;

@Override
public void run() {
for (int k = 0; k < 30; k++) {
// 1.5.0 版本开始可以直接利用 try-with-resources 特性 自动回收调用 entry.exit() 配合注解使用 @SentinelResource("HelloWorld")
try (Entry entry = SphU.entry(
"HelloWorld",
EntryType.IN)) {
// 被保护的逻辑
System.out.println(Thread.currentThread().getId() + "hello world" + (++i));

} catch (BlockException ex) {
i++;
// 处理被流控的逻辑
System.out.println("blocked!");

}
}

}
}).start();

}
Thread.sleep(500000000);
}
打印日志
25hello world1
24hello world1
26hello world1
23hello world1
blocked!
blocked!
blocked!
blocked!
blocked!
blocked!
blocked!
blocked!
blocked!
blocked!
blocked!
blocked!
blocked!
blocked!
blocked!
blocked!
blocked!

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.