请问这个是我单测写的有问题吗?我限流设置的是1,但是多线程访问进入了线程数的请求。
- 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
Assessment
This issue has not been assessed yet.