gpt4 book ai didi

java - 无法在 Hystrix 中应用 "sleepWindowInMilliseconds"属性

转载 作者:行者123 更新时间:2023-12-01 18:09:00 25 4
gpt4 key购买 nike

您好,我正在尝试在示例程序中使用 Hystrix 模式。使用以下版本 com.netflix.hystrix:hystrix-core:1.4.21

import com.netflix.hystrix.HystrixCommand;
import com.netflix.hystrix.HystrixCommandGroupKey;
import com.netflix.hystrix.HystrixCommandProperties;

import java.util.GregorianCalendar;
import java.util.Map;

public class ServiceInvoker extends HystrixCommand<String> {

Map<String, String> serviceParams;

public String invokeService(Map<String, String> serviceParams){
System.out.println("Inside invokeService");
//Induce processing delay START
long currentTime = GregorianCalendar.getInstance().getTimeInMillis();
long timeNow = 0;
long bound = 3000;
while(timeNow < (currentTime+bound)){
timeNow = GregorianCalendar.getInstance().getTimeInMillis();
}
//Induce processing delay END
return "Service Invoked";
}

public ServiceInvoker(Map<String, String> params){
super(Setter
.withGroupKey(HystrixCommandGroupKey.Factory.asKey("MYKEY"))
.andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
.withCircuitBreakerSleepWindowInMilliseconds(60000)
.withExecutionTimeoutInMilliseconds(2000)
.withCircuitBreakerErrorThresholdPercentage(5))
);
this.serviceParams=params;
}


@Override
protected String run() throws Exception {
return invokeService(serviceParams);
}

@Override
protected String getFallback() {
System.out.println("Inside FallBack");
return "FALLBACK";
}

public static void main(String args[]) throws InterruptedException {

while(true) {
ServiceInvoker si = new ServiceInvoker(null);
String op = si.execute();
System.out.println("output="+op);
Thread.sleep(100);
}
}
}

当我运行上面的代码时,我会不停地重复跟踪。

Inside invokeService
Inside FallBack
output=FALLBACK

我认为,由于我已将 withCircuitBreakerErrorThresholdPercentage 设置为 5%,并将 withCircuitBreakerSleepWindowInMilliseconds 设置为 60000(1 分钟),我认为一旦收到少量错误,它将打开电路并始终返回 FALLBACK,它甚至不会尝试调用 invokeService,因此在 60 秒内不会打印“Inside invokeService”。有人可以解释一下吗,为什么电路没有打开?

最佳答案

还有一个参数 CircuitBreaker.requestVolumeThreshold,默认值为 20 - 意味着统计窗口中总共至少需要 20 个请求。窗口的大小由metrics.rollingStats.timeInMilliseconds配置。

如果窗口中未达到 20 个请求,断路器将不会跳闸。

在调查此场景时,您可能还想记录来自 HystrixCommandMetrics 的信息。

关于java - 无法在 Hystrix 中应用 "sleepWindowInMilliseconds"属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34302187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com