Java VertX 프레임 워크를 사용 중이고 VertX WebClient 및 간단한 HTTP 요청을 사용하여 여러 JSON 개체를로드하려고합니다. 나는 이것을 병렬로 수행하여 프로세스 속도를 높이고 싶습니다. 나는에서 계속하는 방법을 잘 모르겠습니다VertX HTTP 요청 병렬 처리
public static void useCompletableFutureWithExecutor(List<Endpoint> tasks) {
long start = System.nanoTime();
ExecutorService executor = Executors.newFixedThreadPool(Math.min(tasks.size(), 10));
List<CompletableFuture<JsonObject>> futures =
tasks.stream()
.map(t -> CompletableFuture.supplyAsync(() -> t.loadJsonObject(), executor))
.collect(Collectors.toList());
List<JsonObject> result =
futures.stream()
.map(CompletableFuture::join)
.collect(Collectors.toList());
long duration = (System.nanoTime() - start)/1_000_000;
System.out.printf("Processed %d tasks in %d millis\n", tasks.size(), duration);
System.out.println(result);
executor.shutdown();
}
: 내가 병렬 (source을)이 처리해야 다음과 같은 기능을 가지고 다른 클래스에서
import io.vertx.core.Vertx;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.client.WebClient;
import io.vertx.ext.web.codec.BodyCodec;
public final class Endpoint {
private final String name;
private final String url;
public Endpoint (String name, String url) {
this.name = name;
this.url = url;
}
public String getName() {
return name;
}
public String getUrl() {
return url;
}
public JsonObject loadJsonObject() {
WebClient client = WebClient.create(Vertx.vertx());
client.getAbs(this.getUrl()).as(BodyCodec.jsonObject()).send(handler -> {
// what to do
});
return null;
}
}
:
나는 끝점 개체가 이. VertX WebClient는 비동기 처리기를 사용하도록 강제합니다. 즉, JsonObject를 직접 반환 할 수 없습니다.