2017-11-14 13 views
0

現在、私はいくつかの制限を設けて、SpringブートのAOP方式でのリクエストタイムアウト管理を実装するアプローチを模索しています。要件/制限は以下のように述べている:SpringブートでAOP方式でリクエストタイムアウト管理を実装する方法

  • 本来の目的は、APIリクエストの処理時間が5秒を超えた場合は、直接、タイムアウトの結果を返す代わりに、残りのAPIがあることを
  • の処理を続けるということです監視されているのは、標準のバネmvcレストコントローラです。すべてのAPIは、内部のこのようなJSON文字列を返すされています

    @RestController 
    public class xxxxxx { 
        @RequestMapping(value = "xxxxxxx") 
        public String xxxxxx(@RequestParam(value = "xxxx", required = true) String xxxx) { 
         .... 
         return json.toString(); 
        } 
    } 
    
  • タイムアウトロジックはAOP
  • (実数は一部を意味する) によって実装される必要がある変更が意味し、コントローラに行われるべきではありません:リクエスト生成アプローチは変更しないでください。戻り値の型は、私はすでに完全に春の非同期での問題そのものを解決することができます1つの答え(Async approach)を発見した、とタイムアウトリターン結果は(NO「呼び出し可能< ...>」許可)

を変更しないべきではありません非常にきれいですが、戻り値の型が変更され、コントローラのコードにも触れています。私はAOPを使用している解決策(AOP approach)も見つけましたが、シナリオは私のものとは全く異なります。すでにビジネスロジックをAOPクラスに移行していますが、コントローラコードに触れることはできません。誰かが解決策を提供できるのであれば、私は感謝しています。制限をすべて満たすことはできませんが、違いを最小限に抑えるソリューションも認められています。

答えて

0

まだこの質問に対する回答がないので、私は自分の一時的な解決策をここに入れます。

私はHystrix依存関係を使用しています。

<dependency> 
     <groupId>org.springframework.cloud</groupId> 
     <artifactId>spring-cloud-starter-hystrix</artifactId> 
     <version>1.4.0.RELEASE</version> 
    </dependency> 

これはspringbootと完全に統合されているため、設定が簡単です。適切に構成したら、タイムアウト処理が必要なリクエストメソッドにアノテーションを追加する必要があります。例えば

@HystrixCommand(fallbackMethod="fallback") 
@RequestMapping(value = "xxxxxxx") 
public String xxxxxx(@RequestParam(value = "xxxx", required = true) String xxxx) { 
    .... 
    return json.toString(); 
} 

そして「fallbackMethod」内部の注釈の値にマッピングされた名前でフォールバックメソッドを追加する必要があります。タイムアウト時間の値は、グローバル内部に構成することができます

public String fallback() { 
    ... 
} 

をapplication.properties
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=3000 
hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds=3000 

これは、これらの点でまだ簡潔ではありません。

  • がhystrixのフォールバック方式自体については
  • 使用されているすべての場所hystrixにフォールバック方式をコピー/貼り付ける必要があり、すべての方法のため、この注釈をコピー/貼り付ける必要があり、パラメータの種類と数は、と全く同じである必要がヒステリックマークされた方法。現在、私はいくつかのオーバーロードメソッドを使用していますが、これは各コントローラで 'fallback'と呼ばれています。

少なくとも、メソッドの戻り値の型とメソッドのコードは変更されていません。よりよい解決策を見つけたら更新を行います。

関連する問題