Я хочу обрабатывать несколько запросов http одновременно.Это означает, что я хочу, чтобы поток, который получает запрос http, переместил дескриптор запроса в другой поток и был доступен для получения новых запросов, пока обработчик не предоставит результат.Я буду признателен, если кто-то может показать мне, как это правильно.Спасибо!
Я пытался работать с CompletableFuture, но, видимо, я что-то не так делаю, поскольку поток, который получает запрос, блокируется для получения новых запросов до тех пор, пока обработчик не завершит работу.
Как видите, толькопосле того, как обработчик закончил (10 секунд сна) - поток запроса получает новый запрос, поэтому я не имею никакого преимущества, чтобы обработчик был выполнен в другом потоке.
@GET
@Path("/{phoneNumber}")
@Produces(MediaType.APPLICATION_JSON)
public Response query() throws InterruptedException, ExecutionException
{
log.debug("get a request");
String message = calculateAsync().get();
return Response.ok(message).build();
}
public Future<String> calculateAsync() throws InterruptedException
{
CompletableFuture<String> completableFuture = new CompletableFuture<String>();
completableFuture = CompletableFuture.supplyAsync(() ->
{
try {
Thread.sleep(10000);
log.debug("finish waiting");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "hello";
});
return completableFuture;
}
2019-06-2106: 38: 48,080 DEBUG [grizzly-http-server-0] [com.xconnect.np.test.superquery.suppliers.http.QueryResource] - получить запрос 2019-06-21 06: 38: 58,081 DEBUG [ForkJoinPool.commonPool-worker-1] [com.xconnect.np.test.superquery.suppliers.http.QueryResource] - завершить ожидание 2019-06-21 06: 38: 58,116 ОТЛАДКА [grizzly-http-server-0] [com.xconnect.np.test.superquery.suppliers.http.QueryResource] - получить запрос 2019-06-21 06: 39: 08,113 DEBUG [ForkJoinPool.commonPool-worker-1] [com.xconnect.np.test.superquery.suppliers.http.QueryResource] - завершить ожидание