2017-05-17 36 views
0

我發展春天開機其中我提供的大多是1-3 sec.My控制器內的響應REST API是象下面這樣:如何確保每個API調用都被提供(Queuing Rest API調用)?

@RestController 
public class ApiController { 
    List<ApiObject> apiDataList; 

    @RequestMapping(value="/data",produces={MediaType.APPLICATION_JSON_VALUE},method=RequestMethod.GET) 
    public ResponseEntity<List<ApiObject>> getData(){          
     List<ApiObject> apiDataList=getApiData(); 
     return new ResponseEntity<List<ApiObject>>(apiDataList,HttpStatus.OK); 
    } 
    @ResponseBody 
    public List<ApiObject> getApiData(){ 
     List<ApiObject> apiDataList3=new List<ApiObject>(); 
     //do the processing 
     return apiDataList3; 
    } 
} 

所以我有一個300個用戶同時加載API.I執行使用JMeter進行負載測試並且它是可以的。但是仍然有一些失敗(並不是所有的API調用都被提供)。那麼我該如何克服這個問題?如何在API調用中插入任何隊列或者其他方法來確保每個隊列API調用是用數據響應的?

回答

1

你的意思是說你想確保所有的請求都返回數據?如果是,您可以使用@Async並獲得CompletableFuture。然後在您的Controller中,您可以使用CompletableFuture獲取響應。如果出現故障,您可以設置超時並捕獲異常以記錄錯誤。

希望得到這個幫助。

+0

是的我想要所有的請求返回數據。你可以解釋一下@Async情況下發生了什麼?如果你提供一個例子,這將有所幫助 – Ricky

+0

我相信這個例子在Spring中很明顯:https://spring.io/guides/gs/async-method/。但在java 8中,我們有CompletableFuture比Future更好。要應用它的示例在這裏:https://www.javacodegeeks.com/2016/04/spring-async-javas-8-completablefuture.html –