0

こんにちは、サンプル プログラムで 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 (1Minute) に設定したので、エラーをほとんど受信しないと、回路が開かれ、常に FALLBACK が返されるだけで、invokeService を呼び出そうとさえしないと思いました。したがって、「Inside invokeService」は 60 秒間出力されません。誰かがこれに光を当てることができますか、なぜ回路が開かれていないのですか?

4

1 に答える 1