Spring WebFlux - 关于复制方法调用的问题

Spring WebFlux - a question about duplicating method invocation

我使用 Spring Reactive 框架创建了一个综合应用程序来研究缓存机制,这是与 Webflux 一起提出的。 我注意到,当我使用 Webclient 时,它指向第三方 URL,使用它的方法被调用两次,而 WebClient,指向第三方 URL正如预期的那样,我自己的端点每次请求只被调用一次。

我想知道为什么会这样?

这是我的页面抽象代码,当 webClient 与本地主机 URL 相关联时,每个请求仅调用一次方法 getBody()。但是当 webClient 与 https://other.size 相关联时,此方法会被调用两次,因此我会看到两次 log.info 消息:

public class Page {

    private Mono<String> res;

    public Page(WebClient webClient, String url) {
        res = webClient.get()
                .uri(url)
                .retrieve()
                .bodyToMono(String.class)
                .cache();
    }
    public Mono<String> getBody() {
           log.info("getting data");
           return res;
    }
}

这是完整项目的 link:https://github.com/RassulYunussov/webluxmistery

感谢您的视频。真的很有帮助。

因此,如果您从浏览器点击 /tengri 端点,您将收到两次日志,我可以确认我在我的机器上看到了相同的行为。

但是,如果您使用 curl 点击 /tengri,您只会获得日志行一次。

此外,查看浏览器上的网络流量,我可以看到对 /tengri 端点进行的第二个 api 调用。

当浏览器呈现 html 并第二次调用 /tengri 时,是否会发生一些额外的逻辑?