在 Ben Manes 发表评论后更新答案。您可以将@Cacheable
Spring Boot Cache Manager 用于响应式Spring Webflux,但在后台,值存储在同步缓存中。这是一个例子
@RestController
@SpringBootApplication
@EnableCaching
public class GatewayApplication {
@PostMapping(value ="/test", produces = "application/json")
public Flux<String> handleRequest(@RequestBody String body) {
return getData(body);
}
@Cacheable("cache")
private Flux<String> getData(String body) {
return WebClient.create().post()
.uri("http://myurl")
.body(BodyInserters.fromObject(body))
.retrieve().bodyToFlux(String.class).cache();
}
}
正如您在上面的示例中看到的,它使用 Spring Webflux(Project reactor) 和@Cacheable
方法返回异步的 Flux。
AsyncCache
如果您想要反应式缓存,您可以直接使用它存储CompleteableFutures