我有一个Spring Boot应用程序(除此之外)从第三方JSON API(使用OAuth保护)获取一些数据,处理结果并将其呈现给用户。该应用程序收到约。每秒1次请求。 不幸的是,此过程目前非常缓慢(在许多情况下甚至以503错误结束),我正在寻找改进实施的一些想法。 (顺便说一句:第三方API本身似乎并不是我的应用程序在我的本地计算机上运行的实例的瓶颈,使用完全相同的API响应非常快,同时部署实例需要很长时间)。 / p>
对于API调用,我使用Apache HTTP库 - 或者更具体地说是Async HTTP Client:
this.httpClientAsync = HttpAsyncClients.custom()
.setDefaultCredentialsProvider(credsProvider) //for forward proxy
.build();
对API的实际调用是这样的:
updateToken(); //get or update OAuth Token
HttpGet httpget = new HttpGet(URL);
httpget.addHeader("Authorization", "Bearer " + accessToken);
Future<HttpResponse> f = this.httpClientAsync.execute(httpget, callback);
您对如何改进实施有任何建议吗? 说实话,我甚至不知道目前瓶颈在哪里。关于如何找到它的任何想法?
感谢您的提示!
还有一件事/更新: Spring Controller看起来像这样:
@RequestMapping(value = "/api/v1/api_data")
public DeferredResult<ResponseEntity<Map>> getAPIData() throws IOException, InterruptedException {
DeferredResult<ResponseEntity<Map>> res = new DeferredResult<>();
triggerAPICall(new FutureCallback() {
public void completed(Object o) {
(...)
res.setResult(...);
}
(...)
}
return res;
}
此外,我最初没有使用HTTP客户端的异步版本,而是使用阻止版本。这甚至减慢了应用程序的其余部分......