Java 如何确保每个API调用都得到服务(对Rest API调用进行排队)?

Java 如何确保每个API调用都得到服务(对Rest API调用进行排队)?,java,rest,api,spring-boot,httpresponse,Java,Rest,Api,Spring Boot,Httpresponse,我正在Spring Boot中开发一个REST API,我将在1-3秒内提供响应。我的控制器如下所示: @RestController public class ApiController { List<ApiObject> apiDataList; @RequestMapping(value="/data",produces={MediaType.APPLICATION_JSON_VALUE},method=RequestMethod.GET) p

我正在Spring Boot中开发一个REST API,我将在1-3秒内提供响应。我的控制器如下所示:

@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。我用JMeter执行了负载测试,结果还行。但仍然存在一些故障,没有提供所有API调用。那么我如何克服这一问题?如何在API调用上添加任何到达的队列或任何其他方法,以确保每个API调用都有数据响应?

您的意思是要确保所有请求都返回数据吗?!如果是,您可以使用@Async并获得可完成的未来。然后在控制器中,您可以使用CompletableFuture来获得响应。如果出现一些故障,您可以为此设置超时并捕获异常以记录错误


希望这有帮助。

是的,我希望所有请求都返回数据。您能解释一下@Async案例中的实际情况吗?如果您提供一个示例,这将很有帮助。我相信这个示例来自Spring:。但在Java8中,我们拥有比未来更好的完全未来。应用它的示例如下所示: