Я читаю данные из базы данных в бэкэнде (код vertx), и в каждой строке есть URL-адрес, по которому я буду выполнять HTTP-запрос «GET» для поля состояния в ответ, который я сохраняю обратно в базу данных и отправляю в пользовательский интерфейс.
Метод CreateRequests выполняет http-запросы. Я хочу сделать это одновременно.
List<Future> toComplete=new ArrayList<>();
Vertx vertx = Vertx.vertx();int i;
for(i=0;i<requestsListInDept.size();i++)
{
String reqtype = requestsListInDept.getString(i);
JsonObject requestProperties = dataReader.getRequestProperties(dept,reqtype);
toComplete.add(Future.future());
int currrent=i;
vertx.executeBlocking(future->{
System.out.println("calling for ");
String individualResponse = accReq.createRequests(requestContext,reqtype,empid,requestProperties);
toComplete.get(currrent).complete(individualResponse);
future.complete(individualResponse);
},false,res->{
JsonArray obj=new JsonArray( (res.result()).toString() );
for(int index=0;index<obj.size();index++)
{
JsonObject requestResponse=obj.getJsonObject(index);
response.add(requestResponse);
}
toComplete.get(currrent).complete(res.result());
});
}
CompositeFuture.all(toComplete).setHandler(e -> {
String collect = e.result()
.list()
.stream()
.map(Object::toString)
.collect(Collectors.joining(" ------- "));
System.out.println(collect);
});
return ;
Как эффективно выполнять одновременные вызовы, объединять ответы (которые я буду отправлять в пользовательский интерфейс) и хранитьих обратно в БД
Я зацикливаю все URL и делаю запросы get в цикле. Если есть большие данные, я получаю Timeout (Это очевидно)