问题描述
我现在使用 spring-boot 和 spring-webflux 2.4.3(包括 reactor-netty 1.0.4)。我一直在测试 WebFlux 来重写我的控制器代码。所以我写了一个简单的测试代码来等待和检查一个资源。
几次尝试后,我意识到 skipUntil
、filter
和 handle
运算符使可观察对象等待第一个元素发出。以下不是原始测试代码。它只是用于测试 skipUntil
的代码。
如果我从下面的代码中删除 skipUntil
运算符并使用 Ctrl-C
停止 curl,它会立即正确地显示 Canceled
。否则,它只是等待并在 100 秒后取消。这是 WebFlux 中的预期行为吗?
@RestController
@Log4j2
@requiredArgsConstructor
public class AudioDumpFileAccessController {
@GetMapping(value = "/dumps")
public Flux<String> getDumpFiles() {
return Flux.interval(Duration.ofSeconds(1)) // Simulates waiting something periodically.
.doOnNext(System.out::println)
.map(aLong -> {
// Get a resource and return it
return aLong;
})
.skipUntil(aLong -> aLong > 100) // Simulates available resource.
.take(1)
.doOnCancel(() -> System.out.println("Cancelled"))
.doOnComplete(() -> System.out.println("Completed"))
.map(aLong -> String.format("Text %d",aLong));
}
}
$ curl localhost:6631/dumps
我如何使用 spring-webflux 实现这些?
- 正在等待某些资源可用。
- 当客户端断开连接时,必须立即取消 Observable。
我看到并测试了 the workaround。但我认为这个答案似乎是针对 SSE 的。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)