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

1rhkuytd  于 5个月前  发布在  Spring
关注(0)|答案(1)|浏览(95)

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

nr7wwzry

nr7wwzry1#

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

/**
 * @param values List of integers
 * @param concurrency concurrency factor. Means how many requests to send at a time
 */
public void sendValues(List<Integer> values, Integer concurrency) {
    Flux.fromIterable(values)
            .flatMap(value -> sendRequest(value), concurrency) // set concurrency factor here
            // proceed with the response here
            .subscribe();
}

public Mono<String> sendRequest(Integer value) {
    return webClient.post()
            .uri("https://sendvalue.com")
            .bodyValue(String.valueOf(value))
            .retrieve()
            .bodyToMono(String.class) // map response body to String
            .doOnNext(__ -> log.info("Successfully sent {}", value)); 
}

字符串

相关问题