在基于Spring Boot Webflux的微服务中,订户是谁?

Jat*_*tin 2 spring-boot reactive-streams spring-webflux

注意:此处,从反应式流规范中使用术语订户和订户。

在基于Spring Boot Webflux的微服务中考虑以下@RestController方法。

    @GetMapping(path = "/users", produces = MediaType.APPLICATION_JSON_VALUE)
    public Flux<TradingUser> listUsers() {
        return this.tradingUserRepository.findAll();
    }

    @GetMapping(path = "/users/{username}", produces = MediaType.APPLICATION_JSON_VALUE)
    public Mono<TradingUser> showUsers(@PathVariable String username) {
        return this.tradingUserRepository.findByUserName(username);
    }
Run Code Online (Sandbox Code Playgroud)
  1. 在这里,“谁/什么”将充当“订户”?我假设Spring Boot框架提供了Subscriber(?),有人可以提供详细信息或与此相关的任何链接吗?

  2. 假设我正在使用诸如postman / curl / browser之类的客户端来调用上述宁静的端点,那么在这种情况下,客户端如何向响应服务器发出需求信号?(只有Subscriber在Subscription对象上具有使用request(n)方法来表示需求的句柄。但是,由于Subscriber可能也是在Spring Boot框架实现的服务器端,因此实际的客户端如何发出信号?)我显然缺少了一些东西。

Bri*_*zel 5

当前使用HTTP,由于HTTP协议不支持此功能,因此确切的背压信息无法通过网络传输。如果我们使用其他有线协议,这可能会改变。

因此,响应流需求在HTTP级别转换为实际的读/写。

如果查看Spring Framework的org.springframework.http.server.reactive.ServletHttpHandlerAdapter,您会看到该类在Servlet 3.1异步I / O和响应流之间进行了调整。它确实实现了一个特定的Subscriber类。

也有其他特定的适配器实现:Undertow,Jetty,Tomcat,Reactor Netty。如果底层服务器支持响应流,我们将仅让服务器处理需求。如果不是,Subscriber则使用实现。