我正在寻找缓存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 响应的有效方法吗?