注意:这里的术语订阅者和订阅正在从反应流规范中使用 .
在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 回答
目前使用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
实现 .