谁在响应式 Web 应用程序中调用 Flux 或 Mono 上的订阅

vjk*_*vjk 11 reactive-programming project-reactor spring-webflux

我正在查看一些响应式 Web 应用程序的示例,我看到它们是这样的

@RequestMapping(value = "/{id}", method = RequestMethod.GET)
@ResponseBody    
public Mono<Person> findById(...) {
    return exampleService.findById(...);
}

@RequestMapping(method = RequestMethod.GET, produces = MediaType.TEXT_EVENT_STREAM_VALUE)
@ResponseBody
public Flux<Person> findAll() {
    Flux<Person> persons = exampleService.findAll();
    return persons;
}
Run Code Online (Sandbox Code Playgroud)

当我在文档中阅读有关 Mono 和 Flux 时,它提到必须为 Mono 或 Flux 调用subscribe以发出数据。

因此,当我在本地运行这些反应式 Web 应用程序并在我点击端点时使用邮递员/chrome 浏览器时,我得到了结果。

在服务端,虽然端点返回 Mono 或 Flux,但我如何在浏览器/邮递员中看到实际结果。每当我点击返回 Mono/Flux 类型的端点时,浏览器是否会在内部调用订阅

Ily*_*ich 7

MonoFlux概念仅存在于您的应用程序中,而 HTTP 协议用于在您的 postman/chrome 应用程序和您的应用程序之间进行通信。
春节Webflux框架的内部类订阅Mono,并Flux通过您的控制器方法返回的实例,并基于对它们映射到HTTP报文MediaType,你在指定的RequestMapping

  • 恩,那就对了。如果返回类型是 Flux 并且媒体类型只是 json,Spring 将订阅 Flux,等到最后一个元素或出现错误,然后在一个 HTTP 响应中序列化整个元素列表。无限通量将导致客户端超时。 (2认同)