1

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

webClient.get()
            .uri(endpoint)
            .headers(this::configureHttpHeaders)
            .retrieve()
            .bodyToMono(String.class)

retrieve即使我对返回的 Mono 什么都不做,该方法也会被执行。

我原以为只有在某人(订阅者?)真正想要从 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))
4

1 回答 1

2

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

您可以在此处阅读有关它们的更多信息projectreactor.io/docs/core/release/reference/#reactor.hotCold要将热发布者转换为冷发布者,您可以使用该defer功能。

于 2020-04-14T18:48:37.127 回答