我正在评估使用Spring Webflux,但我们必须支持期望使用application / json而不是application / stream + json的客户端。我不清楚在需要application / json的客户端中,Spring WebFlux如何处理序列化Flux。
如果将Flux序列化为application / json而不是application / stream + json,这是否是阻塞操作?
下面,我整理了一个示例控制器来演示我所看到的。当流是无限的并且产生application / json时,什么都不会返回到浏览器。这似乎很合理,因为它可能正在等待流终止。当流是无限的并产生application / stream + json时,我会按预期在浏览器中连续看到JSON对象。当Flux是有限的(例如100个元素)并且类型为application / json时,它将一次按预期呈现。问题是,它是否必须等待Flux终止才能进行序列化,是否会导致阻塞操作。返回正常的application / json时,使用Flux对性能和可伸缩性有何影响?
@RestController
public class ReactiveController {
/* Note: In the browser this sits forever and never renders */
@GetMapping(path = "/nonStreaming", produces = MediaType.APPLICATION_JSON_VALUE)
public Flux<Person> getPeopleNonStreaming() {
return Flux.interval(Duration.ofMillis(100))
.map(tick -> new Person("Dude", "Dude", tick));
}
/* Note: This renders in the browser in chunks forever */
@GetMapping(path = "/streaming", …Run Code Online (Sandbox Code Playgroud)