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

拉苏尔·尤努索夫

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

我想知道为什么会这样?

这是我的页面抽象代码,当 awebClient与 localhost 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;
    }
}

这是完整项目的链接:https : //github.com/RassulYunussov/webluxmisery

迈克尔·麦克法登

谢谢你的视频。这真的很有帮助。

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

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

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

来自 http://localhost:8080/tengri 的部分网络流量

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章