2015-12-03 8 views
7

私はRequestContextHolder.getRequestAttributes()nullで、RequestInterceptor.apply内、装うクライアントRequestInterceptorでリクエストヘッダを転送せず、したい装うクライアントRequestInterceptorとリクエストヘッダ、そうSecurityContextHolder.getContext().getAuthentication()です(私も最終的には私のヘッダの値を得ることができる場合) 。フォワード

hystrix.command.default.execution.isolation.strategy: SEMAPHORE 

さて、私は:

これは、次のパラメータを変更することで問題を解決しているためhystrixコマンドは今、おそらく、別のスレッドで実行する必要があります春クラウドブリクストン、にアップグレードする前に働いていました必要でない場合、この種のデフォルト値を変更することにあまり熱心ではありません。現在、ヘッダーを転送する別の推奨方法がありますか?

おかげ

+0

'@ RequestHeader'をfeignメソッドに渡すことができます。また、hystrix.commandを使って、それぞれのFAIGコールをSEMAPHOREに個別に設定することもできます。 .exe .strategy:SEMAPHORE'となります。 – spencergibb

+0

@spencergibb:ありがとう、それは私が思ったことです。私は私のプロジェクトの文書に注釈をつけます。 –

+0

スレッドとセマフォの分離を簡単に設定できるようにしたいと考えています。 – spencergibb

答えて

4

OKは、これを行う方法はあり...インスピレーションのためのSpring Cloud Sleuthに感謝します。

"すべて"を実行すると、スレッドの変更があるたびに情報を渡すHystrixConcurrencyStrategyを実装する必要があります。 Sleuthで非常によく似たことをするクラスはhereです。私の特定の場合、私は希望の場合

  1. を構築したときにラップwrapCallableCallableとは、例えば、現在の認証を開催するCallableWithAuthenticationクラスCallableWithAuthenticationcall方法は、まず以前の復元うAuthenticationを保存した後、元のアクションを呼び出して、現在のAuthenticationなどをクリーンアップします。

HystrixConcurrencyStrategyがあなたの要求を満たしたら、スレッド隔離を使用しても、インターセプタは再び機能します。

注意プロジェクトの残りの部分には、他の面白い計器がたくさんあります(例えばRxJava用)。

+0

あなたが好きでうれしい!D –

+0

@MarcinGrzejszczak:時間はここで問題になりますが、ねえ、どうしてですか? –

+0

これは、現在のスレッドからfeignclientを呼び出す場合にのみ有効です。あるいは、別のスレッドからクライアントを呼び出す設定をしていますか?私はいくつかのバリデーションと外部サービスの呼び出しを行っているカスタムthreadpoolexecutorを使用しています。しかし、この場合リクエスト属性は伝播されません:( – bilak

関連する問題