使用并发请求调用 Rest 端点

Posted

技术标签:

【中文标题】使用并发请求调用 Rest 端点【英文标题】:Call Rest end point with concurrent request 【发布时间】:2021-12-16 11:14:01 【问题描述】:
"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 模板调用单线程。

【问题讨论】:

你有什么问题吗? 问题是如何用并发请求调用其余端点?我知道如何使用 rest 模板调用单线程。 分享您的研究对每个人都有帮助。告诉我们您尝试了什么以及为什么它不能满足您的需求。这表明您已经花时间尝试帮助自己,它使我们免于重复明显的答案,最重要的是它可以帮助您获得更具体和相关的答案!另见:How to Ask 【参考方案1】:

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);

【讨论】:

以上是关于使用并发请求调用 Rest 端点的主要内容,如果未能解决你的问题,请参考以下文章

具有授权的 Keycloak 自定义 SPI REST 端点

使用 Spring Security 保护 REST 端点

从另一个端点调用REST端点

gRPC 服务器如何调用 REST 端点

使用 REST 客户端 POSTMAN 使用 api 密钥调用 AWS api 网关端点

SQL Server - 使用虚拟CSV调用REST API