Si je n'ai qu'une commande Hystrix définie comme classe, j'ai le contrôle sur la définition de la clé de groupe et de la commande comme ci-dessous.Le nom de la commande Feign Hystrix ne fonctionne pas
private static class MyHystrixCommand extends HystrixCommand<MyResponseDto> {
public MyHystrixCommand() {
super(HystrixCommandGroupKey.Factory.asKey("MyHystrixGroup"));
}
Donc, pour la clé de groupe de code ci-dessus est MyHystrixGroup et Command Key est MyHystrixCommand.
Si je veux mettre toutes les configurations de cette commande hystrix je peux faire comme
ConfigurationManager.getConfigInstance().setProperty(
"hystrix.command.MyHystrixCommand.execution.timeout.enabled", false);
Où que ceux par défaut seront,
ConfigurationManager.getConfigInstance().setProperty(
"hystrix.command.default.execution.timeout.enabled", false);
Maintenant, quand je me sers Feindre Hystrix, je Je ne définis pas le nom de la commande/le nom du groupe. Selon la documentation here, la clé de groupe correspond au nom de la cible et la clé de commande est la même que celle des clés de journalisation.
Donc, si j'ai un FeignClient comme celui-ci,
interface TestInterface {
@RequestLine("POST /")
String invoke() throws Exception;
}
je crée l'instance de mon client Feindre dans une classe d'usine. Comme vous le voyez avant de retourner le client, je veux définir la configuration du délai d'attente de ma commande hystrix.
Je le teste avec un MockWebServer.
@Test
public void fallbackFactory_example_timeout_fail() throws Exception {
server.start();
server.enqueue(new MockResponse().setResponseCode(200)
.setBody("ABCD")
.setBodyDelay(1000, TimeUnit.MILLISECONDS));
TestFactory factory = new TestFactory();
TestInterface api = factory.newInstance();
// as the timeout is set to 500 ms, this case should fail since i added 1second delay in mock service response.
assertThat(api.invoke()).isEqualTo("Fallback called : foo");
}
Cela fonctionne seulement quand je régler l'heure sur défaut hystrix paramater hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds
ConfigurationManager.getConfigInstance()
.setProperty("hystrix.command.invoke.execution.isolation.thread.timeoutInMilliseconds", 500);
Cela ne fonctionne pas. De même j'ai essayé ci-dessous des valeurs aucun d'entre eux a travaillé.
hystrix.command.TestInterface#invoke(String).execution.isolation.thread.timeoutInMilliseconds
hystrix.command.TestInterface#invoke.execution.isolation.thread.timeoutInMilliseconds
pourquoi Y a-t-il une downvote que je ne comprends pas? Je luttais pour comprendre ce problème pendant 2 jours et je l'ai posté ici après mes conclusions, parce que cela pourrait être utile à quelqu'un. Quand les gens réagissent, c'est mieux s'ils donnent une raison aussi. –