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
时,是否会发生一些额外的逻辑?
我使用 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
时,是否会发生一些额外的逻辑?