私たちはこのようになりますHystrix(1.4.xの)コマンド(春を使用して)を持っている:hystrixフォールバックの予想されるエラーを適切に処理するにはどうすればよいですか?
@HystrixCommand(groupKey = "GroupKey", commandKey = "CommandKey", fallbackMethod = "myFallback")
public List<X> findXs(long xId) {
return externalService.findXsExternally(xId);
}
私たちが実際にフォールバック方式からList
(空)を返すようにしたいのではなく、例外をスローしません。その結果、findXs
の発信者は、externalService
がダウンしていることを認識し、それに応じて対応することができます。しかし同時に、Hystrixが提供する機能を利用したいと考えています。私たちの場合、呼び出し側はリストを返す代わりにエラーメッセージを返すようにします。春にはフォールバックは次のように実装されています。
public List<X> myFallback(long xId) {
// What to do?? Throw exception!?
}
がmyFallback
から例外を投げる「作品」が、Hystrixは私たちにそれを警告します:
はコマンドキーが失敗し、失敗したフォールバック。
e.e.e.これをフォールバックの失敗と解釈します。我々のケースでは、例外はではなく、をフォールバックの失敗として解釈するのではなく、予期した動作として解釈する必要があります。 HystrixBadRequestException
でスローされた例外をラップしようとしましたが、フォールバックのためには機能していないようです(docsによると、これは "run"メソッドでは機能します)。
Hystrixで例外スローフォールバック方式を実装するにはどうすればよいですか?警告を無視しても、Hystrixはこのように設計されていないのですか?
しかし、@ HystrixCommandで注釈が付けられた複数のメソッドがある場合、HystrixRuntimeExceptionがどこから来ているのかを区別しますか?私は、どのクライアントが持っているかに応じて違った振る舞いをしたいという問題があります。タイムアウトですが、私が知っている唯一の事はHystrixRuntimeExceptionが発生したことだけです。 – woezelmann
アノテーションに** commandKey **という属性があります。あなたはそれをオフにすることができます。私はちょうどそれを** ckey **と設定してテストしましたが、ここに例外のメッセージがあります。** ckeyは失敗し、フォールバックは失敗しました**。おそらく、例外自体の中にさらに多くのメソッドがあります。試してみてください – hyness