2017-04-03 16 views
1

Springは動作するとクールです。しかし、シングルトンの断続的な失敗/再試行の問題に接近する最善の方法を理解することができません。一時的なリソースの障害を回復/処理するためにSpringコンテキストを設定する方法

私はあなたに2つの具体例を挙げてみましょう:

  • のSessionFactoryはHashicorp Vaultは、我々は、リモートサーバーを持っている両方のケースで

を有線さ

  • 、そのイエスはかなり信頼性のあるアップ配線されています特定のコンテナクラス(Vaultの秘密やSessionFactoryを保持しているクラス)の初期化中に問題が発生した場合、再試行するにはどうすればよいですか?

  • +0

    私はストーリーとシナリオを追加しています。スプリングボルトでアプリを起動すると、Vaultコンテナがアプリより遅く起動することができます。アプリケーションがVaultPropertySource設定を使用してVaultを呼び出すと失敗します。これは私のコンテナとアプリ全体に失敗します。私はドキュメントで再試行のメカニズムのオプションを見ていない。 1つまたは実装される予定ですか? 私は間違った角度からこれを見ているなら、私の見解をシフトしてください:) –

    答えて

    0

    Spring Vaultでは再試行の仕組みが提供されていません。 ClientRequestFactoryRetryTemplateとフックすると、Spring Retryとなります。

    再試行は補償の一形態です。この場合(コンテナが正常に起動せず、最初のリクエスト時に正常ではありません)、スタートアップとヘルスチェックの適切なオーケストレーションが不足しているように見えます。アプリケーションの起動中にVaultサービスが正常/起動していると想定していますが、そうではありません。

    再試行はある程度役立ちますが、解決策ではありません。パッチです。

    +0

    私は質問のケースの再試行メカニズムを実装することができました。さて、私はspring-retryが404エラーを処理しないのを見ました。これらの種類のHTTPステータスでRestTemplateまたはHttpClientを再試行するにはどのように設定できますか? hc.apache.org/httpclient-3.x/exception-handling.html hc.apache.org/httpclient-3.x/apidocs/org/apache/commons/...と同様です。 RetryableVaultTemplateクライアントHttpRequestFactoryにカスタムHttpMethodRetryHandlerをどのように提供できますか? –

    +0

    404の再試行メカニズムを '' 'から有効にすることができました @Override public VaultResponse doWithRetry(RetryContextコンテキスト){ logger.debug(" log me doWithRetry "); VaultResponseレスポンス= RetryableVaultTemplate.super.read(パス); if(response!= null){ 返信応答; } 新しいRuntimeExceptionをスローする( "空の応答が受信されました。おそらく404です"); } }); } '' ' –

    +0

    VaultTemplateでは、readメソッドがHttpStatus.NOT_FOUNDをチェックし、nullを返していました。私はnullをチェックし、 "Empty response received。おそらく404"というメッセージでRuntimeExceptionをスローしました。実際の例外をキャッチすることができればうれしいです。どうやってやるの? –