了解Spring Webflux /反应式端点

时间:2019-03-25 15:59:19

标签: spring kotlin spring-webflux

我试图在Spring中理解反应性端点,这使我感到困惑。

// in a @RestController
@GetMapping("/someendpoint")
fun someEndpoint(): ResponseEntity<Mono<Map<String, Any>>> {
    return ResponseEntity(Mono.zip(
        Mono.fromRunnable<List<SomeItem>> { someApiCall() },
        Mono.fromRunnable<List<SomeOtherItem>> { someOtherApiCall() },
    ).map { tuple ->
        val someItems = tuple.t1
        val someOtherItems = tuple.t2
        mapOf(
            "someItems" to someItems,
            "someOtherItems" to someOtherItems
        )
    }, HttpStatus.OK)
}

我有一个端点,它返回一个Map的Mono,这个想法只是呈现一些任意的JSON。

作为请求的一部分,我执行一个Mono.zip(Mono.fromRunnable {...}),在其中调用API来获取数据。

压缩后,我会对结果进行一个.map映射,最终返回我希望看到的Map。

当我点击端点时,没有呈现JSON,但是zip中的runnable被调用,并且响应时间将这些API调用考虑在内。 .zip之后的.map永远不会被调用。我可能只是在这里不明白一些简单的内容-例如.map未订阅?

这是怎么回事,使用Webflux / Reactor处理这种情况的常用方法是什么?

1 个答案:

答案 0 :(得分:0)

正如Rene在评论中提到的那样,我的错误是使用Mono.fromRunnable {}而不是Mono.fromSupplier {}