Definiuję sobie własne ustawienia ThreadPoola, dając parametry jak poniżej
@GetMapping
public String api() throws Exception {
HystrixCommand.Setter conf = HystrixCommand.Setter
.withGroupKey(HystrixCommandGroupKey.Factory.asKey("group-1"));
conf.andThreadPoolPropertiesDefaults(HystrixThreadPoolProperties.Setter()
.withCoreSize(10)
.withMaximumSize(20)
.withMaxQueueSize(10));
return new HCommand(conf).execute();
}
static class HCommand extends HystrixCommand<String>{
protected HCommand(Setter setter) {
super(setter);
}
@Override
protected String run() throws Exception {
Thread.sleep(10);
return "hello";
}
}
I testuje za pomocą apache benchmarka dając 10000 zapytań i 20 wątków jednocześnie. I wynik jest taki, że po rozgrzaniu jvm około 10% zapytań nie przechodzi. Dlaczego nie wszystkie ? O ile dobrze rozumiem, to core size zapycha się w pierwszej kolejności nowymi zadaniami, jak się zapełni to idą one do kolejki, a po zapełnieniu kolejki są tworzone nowe, aż do wyczerpania max size.