Spring Boot 使用WebClient发送具有不同输入值的POST请求的最佳方法

1rhkuytd  于 2024-01-06  发布在  Spring
关注(0)|答案(1)|浏览(195)

我试图使用WebClient通过在POST请求中发送一个整数值作为JSON字符串来进行API调用。我有超过10万个值要发送请求。
使用WebClient对象实现此目的的最佳方法是什么?
当我在单线程循环中调用API时,使用WebClient对象作为示例变量,并为每次调用传递新的JSON字符串,这会花费大量时间。
使调用多线程是唯一的解决方案吗?或者有什么方法可以使调用更有效?

nr7wwzry

nr7wwzry1#

你还没有给出任何细节,你是如何得到你的整数的,但这里有一个简单的例子来实现你想要的。
基本上,你应该把你的整数转换为Flux,然后用.flatMap()异步发送每个请求,并指定并发因子。从docs并发因子是:
concurrency参数允许控制可以并行订阅和合并多少个Publisher。反过来,该参数显示向上游发送的第一个Subscription.request的大小。
代码看起来像这样:

  1. /**
  2. * @param values List of integers
  3. * @param concurrency concurrency factor. Means how many requests to send at a time
  4. */
  5. public void sendValues(List<Integer> values, Integer concurrency) {
  6. Flux.fromIterable(values)
  7. .flatMap(value -> sendRequest(value), concurrency) // set concurrency factor here
  8. // proceed with the response here
  9. .subscribe();
  10. }
  11. public Mono<String> sendRequest(Integer value) {
  12. return webClient.post()
  13. .uri("https://sendvalue.com")
  14. .bodyValue(String.valueOf(value))
  15. .retrieve()
  16. .bodyToMono(String.class) // map response body to String
  17. .doOnNext(__ -> log.info("Successfully sent {}", value));
  18. }

字符串

展开查看全部

相关问题