首页 文章

在 Spring 季启动webflux的微服务,谁是订户?

提问于
浏览
2

注意:这里的术语订阅者和订阅正在从反应流规范中使用 .

在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);
    }
  • 这里“谁/什么”将充当“订阅者”?我假设spring boot框架提供了一个订阅者(?)有人可以提供详细信息或任何链接吗?

  • 假设我正在使用postman / curl / browser等客户端调用上面的restful endpoints ,那么在这种情况下客户端如何向反应服务器发出信号请求? (只有订阅者在Subscription对象上有一个句柄,其中带有request(n)方法来指示需求 . 但是,由于订阅者可能也在Spring引导框架实现的服务器端,因此实际客户端如何发出需求信号?)我显然缺少一些东西 .

1 回答

  • 3

    目前使用HTTP,确切的背压信息不会通过网络传输,因为HTTP协议不支持此功能 . 如果我们使用不同的线路协议,这可能会改变 .

    因此,反应流需求被转换为HTTP级别的实际读取/写入 .

    如果您查看Spring Framework的 org.springframework.http.server.reactive.ServletHttpHandlerAdapter ,您将看到此类在Servlet 3.1 Async I / O和Reactive Streams之间进行了调整 . 它确实实现了一个特定的 Subscriber 类 .

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

相关问题