我正在运行带有Angular6前端的Java / Spring应用程序。在Spring后端中,我通过http调用了另一个API。但是它的响应速度比预期慢了约6倍...
隔离我得到的API调用:
在我的开发机上本地运行相同的设置(Spring,Tomcat 8.5):10-12秒 通过邮递员本地:10-12秒 通过本地本地链接:10-12秒 在AWS EC2实例上从控制台使用cUrl 10-12sec。
在AWS EC2实例上按预期的方式调用(Spring在Tomcat中运行):60-75sec。
试图将本机Spring http(ResponseEntity postForEntity)调用更改为OkHttp,但结果没有变化。 Api请求和响应是一个很小的Json字符串,但是APi很慢,因此响应时间大约为10秒是正常的。
由于EC2上的Tomcat或Java似乎出了点问题。可以错过一些参数吗?还是我还能尝试找出其他解决方法?
发送和恢复的数据量微不足道(发送约350字节,接收的数据少于该数量)
只是对API的调用需要很长时间。
logger.debug("CallApi start");
start = System.currentTimeMillis();
try {
ObjectMapper mapper = new ObjectMapper();
String s = mapper.writeValueAsString(apiCalcDTO.getInput());
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(120, TimeUnit.SECONDS)
.writeTimeout(120, TimeUnit.SECONDS)
.readTimeout(120, TimeUnit.SECONDS)
.build();
MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
RequestBody body = RequestBody.create(mediaType, body);
Request request = new Request.Builder()
.url("http://www.example.com/api/1.0/xxx")
.post(body)
.addHeader("Content-Type", "application/x-www-form-urlencoded")
.addHeader("cache-control", "no-cache")
.build();
Response response = client.newCall(request).execute();
elapsed = System.currentTimeMillis() - start;
logger.debug("CallApi time = " + elapsed);