有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaSpringWebFlux关于复制方法调用的问题

我使用Spring反应式框架创建了一个综合应用程序,以研究Webflux中提出的缓存机制。 我注意到,当我使用指向第三方URL的Webclient时,使用它的方法会被调用两次,而指向我自己端点的WebClient按预期每个请求只被调用一次

我想知道为什么会这样

下面是我的页面抽象代码,当webClient与本地主机URL关联时,每个请求只调用一次方法getBody()。但是当webClient与https://other.size关联时,这个方法会被调用两次,所以我看到了日志。信息消息两次:

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/webluxmistery


共 (1) 个答案

  1. # 1 楼答案

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

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

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

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

    Partial Network Traffic From http://localhost:8080/tengri

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