2017-05-23 9 views
0

これをテストする方法はわかりませんし、可能であれば簡単な答えが必要です。@HystrixCommandで@Asyncを使用することができます

だから私は、サービスのAPI-ゲートウェイコールを持っている、と私が知りたいのは、次の春ブーツ

@Component 
class GatewayService { 

     @Autowired 
     private MicroserviceGateway microServiceGateway; 

     @Async 
     @HystrixCommand(threadPool = "microservice", groupKey = "microService", fallback = "getResponse2") 
     private Future<ResponseDTO> getResponse(RequestDTO request) { 
     try { 
       ResponseDTO response = new APIRequest(endpoint, api).body(request).post(); 
       return new AsyncResult(response); 
     } catch (Exception e) { 
      throw new GatewayServiceException(e); 
     } 
     } 

     public Future<ResponseDTO> getResponse2(RequestDTO request) { 
      return Futures.immediateFuture(RequestDTO.empty()); 
     } 

} 

で可能であるならば、フォールバックが機能することはありますか?それはすべて非同期でしょうか?

EDIT:これを試してみましょう。未来はすぐに返されるので、ヒストリは無視されています。どのような回避策ですか?ソリューション?

+0

"これをテストする方法がわかりません" - そのコードを実行するのはどうですか? – OrangeDog

+0

申し訳ありません、@HystrixCommandを追加するのを忘れました –

+0

hystrixとasyncが一緒に動作するかどうかをテストするにはどうすればいいですか? –

答えて

1

私はアプローチのようになり、スレッドプールを使用してHystrixコマンドasynchronouslyを使用することを信じて:

@HystrixCommand注釈を使用している場合:

... 
    @HystrixCommand 
    public Future<Product> findProduct(String id) { 
     return new AsyncResult<Product>() { 

      @Override 
      public Product invoke() { 
       ... 
       return productService.find ... 
      } 
     }; 
    } 
... 

例えば、Hystrixコマンドクラスを使用している場合ProductCommandFind.java

... 
     ProductCommandFind command = new ProductCommandFind(...); 
     Future<Product> result = command.queue(); 
... 

Hystrixコマンドではそれ自身の設定可能なスレッドプールは、おそらくコマンドグループごとにスレッドプールを設定すると、コマンドによって使用されるPRODUCT_GROUPという名前のコマンドグループ用のスレッドプールを言うことができます:productCommandFind、productCommandCreate、...

基本的に私は同時に@Async@HystrixCommandというメソッドに注釈を付ける必要があります。

0

これは動作するはずです。あなたの通常のDTOメソッドは非同期に実行され、フォールバック中は同期します。

+0

動作しない、編集を確認する –

関連する問題