如何在使用 Spring Reactor 和 Spring Boot 时将 Return Flux 作为响应?

How to Return Flux as response when using Spring Reactor and Spring Boot?

我正在尝试将 Spring Reactor 与我的 Spring 启动应用程序一起使用。

我正在使用 Project Reactor 3.0.7.RELEASE 和 Spring Boot 1.5.3.RELEASE.

我的服务 class 中有一个方法 returns Flux。

我想return web 层中控制器的值。但是,我在 json 响应中看不到值 returns。

当我从浏览器调用 http://localhost:8080 时,我得到的响应是, {"prefetch":-1}

我不确定在 return 响应之前我是否应该做一些从 Flux 到 String 的转换。

我已经在 中分享了我的代码, https://github.com/bsridhar123/spring-reactor-demo/blob/master/src/main/java/com/demo/reactor/ReactiveApp.java

你能帮我找到正确的方法吗?

仅在 Spring 5(当前处于 RC 阶段)和 Spring Boot 2(当前处于里程碑阶段)中实现了使用 Reactor 的完全响应式支持。

可以独立于Spring、使用Reactor,但这不会使框架反应和异步,所以您失去一些利益。你 不能 简单地 return a Flux 因为框架还不理解这种类型。

但是,如果您必须编排大量服务调用,我相信它在服务层仍然有用。

在这种情况下,您可以做的是在整个服务层中使用 FluxMono,并将它们转换为 Spring 4 的 DeferredResult。类似于:

DeferredResult<ResponseEntity<String>> result = new DeferredResult<>();
service.getSomeStringMono()
       .map(n -> ResponseEntity.ok(n))
       .defaultIfEmpty(ResponseEntity.notFound().build()
       .subscribe(re -> result.setResult(re),
                  error -> result.setErrorResult(error));
return result;