谁在响应式 Web 应用程序中调用订阅 Flux 或 Mono
who calls subscribe on Flux or Mono in reactive webapplication
我正在查看一些响应式 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;
}
当我在文档中阅读有关 Mono 和 Flux 的内容时,它提到 订阅 必须调用 Mono 或 Flux 才能发出数据。
因此,当我 运行 在本地使用这些反应性 Web 应用程序并使用 postman/chrome 浏览器时,当我到达端点时,我得到了结果。
在服务方面,虽然端点是 returning Mono 或 Flux,但我如何在 browser/postman 中看到实际结果。
每当我访问 return Mono/Flux 类型的端点时,浏览器是否在内部调用 subscribe?
Mono
和 Flux
概念仅存在于您的应用程序中,而 HTTP 协议用于在您的 postman/chrome 应用程序与您的应用程序之间进行通信。
Spring Webflux 框架的内部 类 订阅由您的控制器方法返回的 Mono
和 Flux
实例,并根据您设置的 MediaType
将它们映射到 HTTP 数据包在 RequestMapping
中指定。
这取决于您使用的服务器。
例如,Tomcat,Jetty (Servlet 3.1 non-blocking I/O) - ServletHttpHandlerAdapter
from org.springframework.http.server.reactive
package.
订阅发生在 service 方法中:
@Override
public void service(ServletRequest request, ServletResponse response) throws
ServletException, IOException {
...
HandlerResultSubscriber subscriber = new HandlerResultSubscriber(asyncContext,
isCompleted, httpRequest);
this.httpHandler.handle(httpRequest, httpResponse).subscribe(subscriber);
}
我正在查看一些响应式 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;
}
当我在文档中阅读有关 Mono 和 Flux 的内容时,它提到 订阅 必须调用 Mono 或 Flux 才能发出数据。
因此,当我 运行 在本地使用这些反应性 Web 应用程序并使用 postman/chrome 浏览器时,当我到达端点时,我得到了结果。
在服务方面,虽然端点是 returning Mono 或 Flux,但我如何在 browser/postman 中看到实际结果。 每当我访问 return Mono/Flux 类型的端点时,浏览器是否在内部调用 subscribe?
Mono
和 Flux
概念仅存在于您的应用程序中,而 HTTP 协议用于在您的 postman/chrome 应用程序与您的应用程序之间进行通信。
Spring Webflux 框架的内部 类 订阅由您的控制器方法返回的 Mono
和 Flux
实例,并根据您设置的 MediaType
将它们映射到 HTTP 数据包在 RequestMapping
中指定。
这取决于您使用的服务器。
例如,Tomcat,Jetty (Servlet 3.1 non-blocking I/O) - ServletHttpHandlerAdapter
from org.springframework.http.server.reactive
package.
订阅发生在 service 方法中:
@Override
public void service(ServletRequest request, ServletResponse response) throws
ServletException, IOException {
...
HandlerResultSubscriber subscriber = new HandlerResultSubscriber(asyncContext,
isCompleted, httpRequest);
this.httpHandler.handle(httpRequest, httpResponse).subscribe(subscriber);
}