【发布时间】:2018-07-04 06:04:40
【问题描述】:
我正在尝试学习 Reactor,但我遇到了很多麻烦。我想做一个非常简单的概念证明,我模拟调用慢速流服务 1 次或更多次。如果您使用反应器并流式传输响应,则调用者不必等待所有结果。
所以我创建了一个非常简单的控制器,但它的行为不像我预期的那样。当延迟在我的 flatMap“内部”(在我调用的方法内部)时,在一切完成之前不会返回响应。但是当我在 flatMap 之后添加延迟时,数据会流式传输。
为什么这段代码会产生 JSON 流
@GetMapping(value = "/test", produces = { MediaType.APPLICATION_STREAM_JSON_VALUE })
Flux<HashMap<String, Object>> customerCards(@PathVariable String customerId) {
Integer count = service.getCount(customerId);
return Flux.range(1, count).
flatMap(k -> service.doRestCall(k)).delayElements(Duration.ofMillis(5000));
}
但这不是
@GetMapping(value = "/test2", produces = { MediaType.APPLICATION_STREAM_JSON_VALUE })
Flux<HashMap<String, Object>> customerCards(@PathVariable String customerId) {
Integer count = service.getCount(customerId);
return Flux.range(1, count).
flatMap(k -> service.doRestCallWithDelay(k));
}
它认为我缺少反应堆 API 的一些非常基本的东西。在那张纸条上。谁能指出一本关于反应堆的好书或教程?我似乎找不到什么好东西来学习这个。
谢谢
【问题讨论】: