gpt4 book ai didi

spring-boot - 在基于 Spring Boot Webflux 的微服务中,谁是订阅者?

转载 作者:行者123 更新时间:2023-12-03 04:51:35 25 4
gpt4 key购买 nike

注意:这里使用的术语“订阅者”和“订阅”来自 react 流规范。

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

  2. 假设我使用像 postman/curl/browser 这样的客户端调用上面的 Restful 端点,那么在这种情况下,客户端如何向响应式(Reactive)服务器发出请求信号? (只有 Subscriber 拥有 Subscription 对象的句柄,并通过 request(n) 方法来发出需求信号。但是,由于 Subscriber 很可能也在 Spring Boot 框架实现的服务器端,那么实际的客户端如何发出需求信号呢?)我显然错过了一些东西。

最佳答案

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

因此, react 流需求在 HTTP 级别与实际读/写之间进行转换。

如果您查看 Spring Framework 的 org.springframework.http.server.reactive.ServletHttpHandlerAdapter,您会发现该类在 Servlet 3.1 Async I/O 和 Reactive Streams 之间进行适配。它确实实现了一个特定的 Subscriber 类。

还有其他特定的适配器实现:Undertow、Jetty、Tomcat、Reactor Netty。如果底层服务器支持响应式(Reactive)流,我们只需让服务器处理需求即可。如果没有,则使用订阅者实现。

关于spring-boot - 在基于 Spring Boot Webflux 的微服务中,谁是订阅者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48181801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com