5

在使用 Netflix 的 Feign 向服务发出 HTTP 请求的 Spring Boot 应用程序中,是否有一种简单的方法可以自动缓存并返回这些缓存值?缓存应该基于传递给请求的参数(类似于记忆一个函数 X 分钟)。

我正在寻找类似以下@Cache注释的内容:

@Component
@FeignClient(value = "facebook", url = "${auth.facebook.url}")
public interface FacebookClient {
    @Cache(600) // Something like this.
    @RequestMapping(method = RequestMethod.GET, value = "/debug_token?input_token={input_token}&access_token={access_token}")
    Map debugToken(@PathVariable("input_token") String inputToken, @PathVariable("access_token") String appToken);
}

当然,我可以使用 . 周围的装饰器自己缓存它FacebookClient,我想知道是否有更快/更少的代码方式。

4

3 回答 3

4

Feign 不支持缓存。我更喜欢 JCache ( JSR-107 ) 并且可能通过spring 指南中描述的 spring-boot-starter-cache使用它

JCache 是 EhCache、Hazelcast 等专有实现的抽象,因此可以在对应用程序影响非常小的情况下更改实现。起初我更喜欢 EhCache 3。

于 2017-03-07T09:10:36.437 回答
2

Springs 可以满足@Cacheable您的需求。

检查:使用 Spring 缓存数据

于 2016-05-01T19:59:08.163 回答
2

Feign 客户端不支持缓存。

另一种更好的方法是创建一个调用 FeignClient 的 Service 类,并将缓存放在这个新 Service 类的方法上。

于 2019-06-03T17:41:03.107 回答