提问者:小点点

在spring boot基于webflux的微服务中,谁是订阅者?


注意:此处使用的术语订阅者和订阅来自反应流规范。

考虑以下@RestController方法在Spring Booking基于web通量的微服务中。

    @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的客户端调用上面的restfulendpoint,那么在这种情况下,客户端如何向反应式服务器发出需求信号?(只有订阅者对订阅对象有一个句柄,该句柄使用request(n)方法发出请求信号。然而,由于订阅服务器可能也位于由spring boot框架实现的服务器端,实际的客户端如何发出需求信号?)我显然错过了什么。


  • 共2个答案

    匿名用户

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

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

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

    匿名用户

    在依赖项org.springframework.spring-web中有一个名为public uludservice(...的函数,它在ServletHttpHandlerAdapter中调用.订阅。当WebFlux上的许多教程显式地显示Mono或Flux的订阅者以演示反应性流如何工作时,我认为有时理解框架在幕后处理此订阅是令人困惑的,但在这里它是由框架为我们完成的。