2017-05-17 23 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 –