注意:此处使用的术语订阅者和订阅来自反应流规范。
考虑以下@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框架实现的服务器端,实际的客户端如何发出需求信号?)我显然错过了什么。
目前使用HTTP时,确切的背压信息不会通过网络传输,因为HTTP协议不支持这一点。如果我们使用不同的有线协议,这可能会改变。
因此,反应流需求被转换为HTTP级别的实际读/写。
还有其他特定的适配器实现:Undertow、Jetty、Tomcat、Retor Netty。如果底层服务器支持反应式流,我们只需让服务器处理需求。如果不是,则使用订阅者
实现。
在依赖项org.springframework.spring-web
中有一个名为public uludservice(...
的函数,它在ServletHttpHandlerAdapter
中调用.订阅
。当WebFlux上的许多教程显式地显示Mono或Flux的订阅者以演示反应性流如何工作时,我认为有时理解框架在幕后处理此订阅是令人困惑的,但在这里它是由框架为我们完成的。