小编mah*_*nhz的帖子

在 Spring WebFlux Web 应用程序中缓存来自 WebClient 调用的 Mono 的结果

我正在寻找缓存Mono(仅当它成功时)这是 WebClient 调用的结果。

通过阅读项目反应器插件文档,我不觉得CacheMono很合适,因为它也缓存了我不想要的错误。

因此,CacheMono我没有使用,而是执行以下操作:

Cache<MyRequestObject, Mono<MyResponseObject>> myCaffeineCache = 
    Caffeine.newBuilder()
            .maximumSize(100)
            .expireAfterWrite(Duration.ofSeconds(60))
            .build();

MyRequestObject myRequestObject = ...;

Mono<MyResponseObject> myResponseObject = myCaffeineCache.get(myRequestObject,
    requestAsKey -> WebClient.create()
                             .post()
                             .uri("http://www.example.com")
                             .syncBody(requestAsKey)
                             .retrieve()
                             .bodyToMono(MyResponseObject.class)
                             .cache()
                             .doOnError(t -> myCaffeineCache.invalidate(requestAsKey)));
Run Code Online (Sandbox Code Playgroud)

在这里,我调用缓存Mono,然后将其添加到咖啡因缓存中。

任何错误都会输入doOnError以使缓存无效。

这是缓存MonoWebClient 响应的有效方法吗?

project-reactor spring-webflux

10
推荐指数
2
解决办法
8772
查看次数

标签 统计

project-reactor ×1

spring-webflux ×1