使用并发请求调用 Rest 端点

Call Rest end point with concurrent request

"url":"https://asia-east2-jsondoc.cloudfunctions.net/function-1?delay=1000"  //url that takes 1000 ms to return     "isParallel": true,     "count": "3" 

isParallel = true 表示进行并行调用,false 表示进行顺序调用,count 表示要进行的并行或顺序调用的次数。

我必须调用上面的端点,输出应该是 1 秒。

如何使用并发请求调用其余端点?我知道如何使用 rest 模板调用单线程。

使用 RestTemplateExecutorService

使用ExecutorServiceRestTemplate执行3个并发调用:

Strnig url = "https://asia-east2-jsondoc.cloudfunctions.net/function-1?delay=1000";
RestTemplate restTemplate = new RestTemplate();
ExecutorService executor = Executors.newFixedThreadPool(3);

Future<String> future1 = executor.submit(() -> restTemplate.getForObject(url , String.class));
Future<String> future2 = executor.submit(() -> restTemplate.getForObject(url , String.class));
Future<String> future3 = executor.submit(() -> restTemplate.getForObject(url , String.class));
                
String response1 = future1.get();
String response2 = future2.get();
String response3 = future3.get();

executor.shutdown();

使用反应式WebClient

使用反应式 WebClient 执行 3 个并发调用并在 subscribe 回调中显示响应:

String url = "https://asia-east2-jsondoc.cloudfunctions.net/function-1?delay=5000";
WebClient webClient = WebClient.builder().build();

Mono<String> mono1 = webClient.get().uri(url).retrieve().bodyToMono(String.class);
Mono<String> mono2 = webClient.get().uri(url).retrieve().bodyToMono(String.class);
Mono<String> mono3 = webClient.get().uri(url).retrieve().bodyToMono(String.class);
                
Flux.merge(mono1, mono2, mono3).subscribe(System.out::println);