微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spring Boot Webflux/Netty - 尽管连接关闭,WebFlux 仍等待来自 skipUntil/filter 的第一个元素

如何解决Spring Boot Webflux/Netty - 尽管连接关闭,WebFlux 仍等待来自 skipUntil/filter 的第一个元素

我现在使用 spring-boot 和 spring-webflux 2.4.3(包括 reactor-netty 1.0.4)。我一直在测试 WebFlux 来重写我的控制器代码。所以我写了一个简单的测试代码来等待和检查一个资源。

几次尝试后,我意识到 skipUntilfilterhandle 运算符使可观察对象等待第一个元素发出。以下不是原始测试代码。它只是用于测试 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 举报,一经查实,本站将立刻删除。