2017-12-08 6 views
0

私は内部的に外部呼び出しを行い、問題の場合には単一の汎用サービス例外をスローするクライアントAPI jarを持っています。私はAPI呼び出しの上にhystrixラッパーを書いています。例外を返す「ユーザーが見つかりません」のようなケースがあります。コールは成功し、サービスは有効な応答で応答しましたが、ヒストリックスはそれを障害として扱います。私はHystrixの例外を無視できることを知っています。サービスコールによってスローされる唯一の例外をホワイトリストに入れます。例外またはhttpステータスコードなどのメッセージに基づいてサービス呼び出しによってスローされた例外を選択的に無視する方法はありますか?Hystrixでサービス例外を選択的に無視することはできますか?

答えて

0

外部サービスが異なる場合に異なる例外をスローした場合、あなたはおそらく、この

@HystrixCommand(ignoreExceptions = {SomeException.class}) 

のようなこれらの例外を無視することができますしかし、あなたは、エラーメッセージの例外拠点を無視する必要があるならば、これを対処するための最良の方法ですあなたの外部の呼び出しの周りにキャッチキャッチします。 catchブロックでは、無視する必要がある例外の1つであるかどうかをチェックします。もしそうなら、何もしないでください。この例外を再発行しない場合このようなことが起こります。さらに詳しい情報HystrixBadRequestException

@HystrixCommand(fallbackMethod = "fallBackMethod", groupKey = "CircuitBreaker", commandKey = "somekey", threadPoolKey = "somekey", 
     commandProperties = { 
      @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "10000"), 
      @HystrixProperty(name = "execution.timeout.enabled", value = "false"), 
      @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "20"), 
      @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "1200000"), 
     }, 
     threadPoolProperties = { 
      @HystrixProperty(name = "coreSize", value = "30"), 
      @HystrixProperty(name = "metrics.rollingStats.timeInMilliseconds", value = "180000") 
     }) 
    public void someMethod(....){ 
      try { 
       // Call external service 
      } catch(Exception e) { 
       if(exception to be ignored) 
       throw new HystrixBadRequestException("Some message", e); 
       else 
        throw e 
      } 
    } 
+0

お返事ありがとうございました。私の問題は、例外を呼び出し元に返すことです。ちょうど私は例外がいくつかのケースで失敗と見なされないようにしたい。 – user9070814

+0

私は自分の答えを修正しました。見てみましょう。ドキュメントhttp://netflix.github.io/Hystrix/javadoc/com/netflix/hystrix/exception/HystrixBadRequestException.htmlによると、それは動作するはずです。私はそれを試していませんが – pvpkiran

関連する問題