3

ザ・春クラウドdocは言う:Spring Cloud Feignクライアントの微調整方法は?

Hystrixがクラスパス上にある場合は、デフォルトで装うが、回路ブレーカを持つすべてのメソッド をラップします。良いことだが、どのように、私は特定の例外を無視するHystrixのオプションを設定します

  1. ?私はErrorDecoderの実装で、HTTPステータスコードを例外にマッピングしています。私が@HystrixCommandをメソッドに入れたら、Feignはそれを尊重しますか?
  2. 私たちの要件は、依存関係に対して行われたすべてのHTTP呼び出しに関するさまざまな詳細を記録することです。現在私はこれを行うRestTemplateを飾っています。私がコードで見て、Dave Syerの答えhereに基づいて、FeignはRestTemplateを使用しません。では、どのようにログ記録要件を満たしていますか?インターフェイスfeign.Clientは有望ですが、私はそれが使用するかどうかは完全にはわかりませんが。

答えて

0

@spencergibbと同様に、Feignは今例外の無視をサポートしていません。そのために私はenhancement requestを開いた。 私の2番目の要件については、RequestInterceptorは応答時間が必要であるため、それを切断しません。RequestInterceptorにはアクセスできません。私はfeign.Clientを実装し、executeメソッドで取られた時間を記録しました。コードの大部分はfeign.Client.Defaultから取られています。そのクラスは拡張用に設計されていません。次のように私は、その後FeignBuilderで私のカスタムクライアントを使用します。

@Bean 
@Scope(SCOPE_PROTOTYPE) 
public Feign.Builder feignBuilder() { 
    return HystrixFeign.builder() 
      .client(loggingEnabledFeignClient()); 
} 

@Bean 
Client loggingEnabledFeignClient() { 
    return new LoggingEnabledFeignClient(); 
} 
4
  1. 装うは@HystrixCommandを尊重しないと例外を無視してサポートしていません。私の提案は、feigns hystrixインテグレーション(feign.hystrix.enabled=false)を無効にし、feign以外のhystrixを使用することです。
  2. Feignがログする場所を与えるRequestInterceptorをサポートしています。詳細については、the docsを参照してください。

例:

@FeignClient(name = "stores", configuration = StoreConfiguration.class) 
public interface StoreClient { 
    //.. 
} 

@Configuration 
public class StoreConfiguration { 

    @Bean 
    public LoggingRequestInterceptor loggingRequestInterceptor() { 
     return new LoggingRequestInterceptor(); 
    } 
} 
+0

ありがとう回路ブレーカをトリガしたいん例外で、私はみます上記。 'HystrixCommand'アノテーションをサポートするために、feignに対する改善リクエストを開いているとどう思いますか? –

+0

私はそれが飛ぶとは思っていません(注釈はjavanicaを使用せず、注釈がどこから来るのですか)。無視された例外を設定する機能を求めてもOKです(実装に関係なく)。 – spencergibb

+0

https://github.com/spring-cloud/spring-cloud-netflix/issues/1346 –

0

我々がそうであっても、エラーの場合は、HTTP 200が、自身のMIMEタイプで応答されますこのような場合の例外のための独自のMIMEタイプを使用します。次に、エラーのMIMEタイプの場合に200erの応答を代行受信し、フォールバックにトラップされずにレスポンス・エラー・コードからデシリアライズすることによって、サーバー側と同じ例外を再試行します。これはwirh FeignといくつかのFeignBuildwr Magicを扱っています

+0

あなたはそのアプローチに複数の問題があります。エラーの場合に200を返すことは、HTTP仕様に違反しています。また、それはMIMEタイプが意味するものではありません。 –

1

あなたはErrorDecoderを書いて投げることができるHystrixBadRequestException(https://github.com/Netflix/Hystrix/wiki/How-To-Use#error-propagationを)あなたは何が

+0

ありがとうございます。しかし、私はFeign hystrixサポート( 'feign.hystrix.enabled = false')を無効にし、呼び出し側メソッドで' @ HystrixCommand'を使う方が簡単だと思います。それが今私がやっていることです。 –

+0

そして、@ HystrixCommandのignroeExceptionsを使用していますか? –

+0

はい、 'ignoreExceptions'を使用しています。 –

関連する問題