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是我们目前正在使用的。如果你补充一个答案,我可以接受。