我一直在尝试进行负载测试(1秒钟内500次请求),以便使用spring boot创建以下三个请求处理程序。受http://callistaenterprise.se/blogg/teknik/2014/04/22/c10k-developing-non-blocking-rest-services-with-spring-mvc/的启发 但我收到了反向输出。 “getUser”-BLOCKING请求处理程序能够在1秒内处理500个请求(但启动了超过200个线程)。 作为NONBLOCKING的“getUser2”和“getUser3”在处理500个请求中的10个请求之后导致503错误。 加特林输出的屏幕截图:https://ibb.co/ePEEBk 有人可以解释一下我的错误原因或原因。
@RequestMapping("/getUser2")
public CompletionStage<Object> getUser2() {
return CompletableFuture.supplyAsync(()-> {
try {
logger.info("");
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "result";
});
}
@RequestMapping("getUser3")
public DeferredResult<String> getUser3() {
DeferredResult<String> def = new DeferredResult<String>();
CompletableFuture.runAsync(()-> {
logger.info("");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}).whenCompleteAsync((res,err)-> {
def.setResult("result");
});
return def;
}
@RequestMapping("getUser")
public String getUser() {
try {
logger.info("");
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "result";
}
答案 0 :(得分:0)
我不确定你是否能找到答案。 但是对于getUser3(),看来您的REST api已超时。默认情况下,它将使用Spring MVC的默认超时。 您可以做的一件事就是创建一个带有超时值的DeferredResult。
DeferredResult(java.lang.Long timeout)
对于getUser,它应该相同,您可能需要更长的超时时间才能对其进行修复