Если у меня просто есть команда Hystrix, определенная как класс, у меня есть контроль над определением группового ключа и командного ключа, как показано ниже.Имя команды Fign Hystrix не работает
private static class MyHystrixCommand extends HystrixCommand<MyResponseDto> {
public MyHystrixCommand() {
super(HystrixCommandGroupKey.Factory.asKey("MyHystrixGroup"));
}
Так для приведенного выше ключа кодовой группы является MyHystrixGroup и Command Key является MyHystrixCommand.
Если я хочу, чтобы установить любые конфигурации этой команды Hystrix я могу сделать, как
ConfigurationManager.getConfigInstance().setProperty(
"hystrix.command.MyHystrixCommand.execution.timeout.enabled", false);
Где, как те, по умолчанию будет,
ConfigurationManager.getConfigInstance().setProperty(
"hystrix.command.default.execution.timeout.enabled", false);
Теперь, когда я использую Feign Hystrix, я Я не определяю имя/имя команды. Согласно документации here, ключ группы совпадает с целевым именем, а командный ключ совпадает с ключом ведения журнала.
Так что, если у меня есть FeignClient, как это,
interface TestInterface {
@RequestLine("POST /")
String invoke() throws Exception;
}
Я создаю экземпляр моего Притвориться клиента в классе фабрики.
class TestFactory {
public TestInterface newInstance() {
ConfigurationManager.getConfigInstance()
.setProperty("hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds", 500);
return HystrixFeign.builder()
.target(TestInterface.class, "http://localhost:" + server.getPort(), (FallbackFactory) new FallbackApiRetro());
}
}
Как вы видите перед возвратом клиента, я хочу установить конфигурацию тайм-аута моей команды hystrix.
Я тестирую его с помощью 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");
}
Это работает только тогда, когда я установить время по умолчанию Hystrix hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds В параметре
ConfigurationManager.getConfigInstance()
.setProperty("hystrix.command.invoke.execution.isolation.thread.timeoutInMilliseconds", 500);
Это не сработало. Точно так же я пробовал значения ниже, ни один из них не работал.
hystrix.command.TestInterface#invoke(String).execution.isolation.thread.timeoutInMilliseconds
hystrix.command.TestInterface#invoke.execution.isolation.thread.timeoutInMilliseconds
почему есть ли понижение, которое я не понимаю. Я изо всех сил пытался понять эту проблему в течение 2 дней, и я разместил ее здесь после моих результатов, потому что это может быть полезно кому-то. Когда люди сбиты с толку, лучше, если они тоже дают причину. –