在Springboot + Webflux中发出并行请求

时间:2018-05-23 06:02:57

标签: reactive-programming

我正在使用带有webflux堆栈的Springboot 2。

在应用程序中,我希望与下游服务并行地发出多个HTTP请求,以减少返回客户端的总体响应时间。这可能没有玩线程吗?

我目前正在使用org.springframework.web.reactive.function.client.WebClient,但对支持此功能的其他客户开放;甚至RXJava。

1 个答案:

答案 0 :(得分:2)

我设法通过下面的方式实现它。这是一个简单的例子,但async / http请求是在downstream.request1()downstream.request2()中提出的。如果是一种更优雅的方式来实现这一点,我会感兴趣。

@GetMapping("/sample")
public Mono<String> getMultipleRequests() {
    Mono<String> monoResponse1 = downstream.request1();
    Mono<String> monoResponse2 = downstream.request2();

    return Mono.zip(monoResponse1, monoResponse2)
        .flatMap(a -> myTransform(a));
}

private Mono<String> myTransform(Tuple2<String, String> tuple) {
    String t1 = tuple.getT1();
    String t2 = tuple.getT2();
    return Mono.just(t1 + t2);
}