Java Spring WebFlux WebClient:延迟执行

Java Spring WebFlux WebClient:延迟执行,java,spring-webflux,spring-webclient,Java,Spring Webflux,Spring Webclient,当我这样定义和调用客户机方法时: webClient.get() .uri(endpoint) .headers(this::configureHttpHeaders) .retrieve() .bodyToMono(String.class) 即使我对返回的Mono不做任何操作,retrieve方法也会执行 我本以为只有当有人(订户?)真的想从Mono上获取数据时才会调用它 为什么会马上打电话?我

当我这样定义和调用客户机方法时:

webClient.get()
            .uri(endpoint)
            .headers(this::configureHttpHeaders)
            .retrieve()
            .bodyToMono(String.class)
即使我对返回的Mono不做任何操作,
retrieve
方法也会执行

我本以为只有当有人(订户?)真的想从Mono上获取数据时才会调用它

为什么会马上打电话?我怎样才能改变这种行为

有关更多上下文:在我的示例中,我只希望在触发CacheFlux onCacheMissResume时执行它:

    Flux<T> defaulValue= client.getStringMono()
            .flatMapIterable(mapper::readObjects);

    CacheFlux.<String, T>lookup(key -> readFluxFromCache(cacheName, key), cacheKey)
                .onCacheMissResume(defaulValue)
                .andWriteWith((key, valueSignal) -> writeFluxToCache(cacheName, key, valueSignal))
Flux defaulValue=client.getStringMono()
.FlatMapiteTable(映射器::readObjects);
CacheFlux.lookup(key->readFluxFromCache(cacheName,key),cacheKey)
.onCacheMissResume(默认值)
.andWriteWith((键,值信号)->writeFluxToCache(缓存名称,键,值信号))

我认为这与所谓的冷热出版商有关


你可以在这里阅读更多关于它们的信息。要将热发布服务器转换为冷发布服务器,你可以使用
defer
函数。

调用该方法可能是因为它是Mono组件的一部分,但不是实际执行,我相信:您可以通过在WebClient调用之后添加doOnNext操作符并在其中放置断点来验证该行为。如果缓存命中,就不应该调用它。我认为它与所谓的
hot
cold
发布者有关。您可以在此处阅读更多有关它们的信息。要将热发布服务器转换为冷发布服务器,您可以使用
defer
函数。@ThomasAndolf-defer是我们目前正在使用的。如果你补充一个答案,我可以接受。