2016-10-13 13 views
2

クラスとして定義されているHystrixコマンドだけの場合は、以下のようにグループキーとコマンドキーの定義を制御できます。Feign Hystrixコマンド名が機能しない

 private static class MyHystrixCommand extends HystrixCommand<MyResponseDto> { 
       public MyHystrixCommand() { 
     super(HystrixCommandGroupKey.Factory.asKey("MyHystrixGroup")); 
    } 

したがって、上記のコードグループキーはMyHystrixGroupであり、コマンドキーはMyHystrixCommandです。

私は装うHystrixを使用していたときに、デフォルトのものが今、

 ConfigurationManager.getConfigInstance().setProperty(
       "hystrix.command.default.execution.timeout.enabled", false); 

になるように、私は

 ConfigurationManager.getConfigInstance().setProperty(
           "hystrix.command.MyHystrixCommand.execution.timeout.enabled", false); 

のように行うことができ、このhystrixコマンドのいずれかの構成を設定したい場合は、私がコマンド名/グループ名を定義していません。ドキュメントhereによると、グループキーはターゲット名と一致し、コマンドキーはロギングキーと同じです。

私は、このよう

 interface TestInterface { 
     @RequestLine("POST /") 
     String invoke() throws Exception; 
    } 

をFeignClientを持っているのであれば、私はファクトリクラスで私装うクライアントのインスタンスを作成します。

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.command.default.execution.isolation.thread.timeoutInMilliseconds

ConfigurationManager.getConfigInstance() 
     .setProperty("hystrix.command.invoke.execution.isolation.thread.timeoutInMilliseconds", 500); 

のparamaterデフォルトhystrixに時間を設定した場合にのみ働いています。 同様に私はそれらのどれも働いていない値を試しました。

hystrix.command.TestInterface#invoke(String).execution.isolation.thread.timeoutInMilliseconds 
hystrix.command.TestInterface#invoke.execution.isolation.thread.timeoutInMilliseconds 
+0

理由です私は理解していないdownvoteがあります。私はこの問題を2日間把握するのに苦労していました。私の発見後に投稿しました。なぜなら、それは誰かにとって有用かもしれないからです。人々がdownvoteとき、彼らはあまりにも理由を与える場合は、より良い。 –

答えて

3

私はそれを理解しました。

が機能しています。私はミスが私のメソッド名が渡されたパラメータを持っていなかったでした。装うhystrixクライアントのために、コマンド名が質問に引用された例えば

FeignClientInterfaceName#MethodNameWithSignatures 

あるので、それは

TestInterface#invoke() 
関連する問題