Spring WebFlux WebClient:延迟执行
Spring WebFlux WebClient: delay execution
当我这样定义和调用客户端方法时:
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))
我认为这与所谓的冷热出版商有关。
您可以在此处阅读更多相关信息 projectreactor.io/docs/core/release/reference/#reactor.hotCold 要将热门发布商转变为冷门发布商,您可以使用 defer
功能。
当我这样定义和调用客户端方法时:
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))
我认为这与所谓的冷热出版商有关。
您可以在此处阅读更多相关信息 projectreactor.io/docs/core/release/reference/#reactor.hotCold 要将热门发布商转变为冷门发布商,您可以使用 defer
功能。