如何在Java Spring应用程序中缓存使用Netflix的Feign库进行的HTTP请求

时间:2016-04-30 16:25:12

标签: spring caching netflix-feign spring-cloud-netflix spring-cloud-feign

在使用Netflix的Feign向服务发出HTTP请求的Spring启动应用程序中,有一种简单的方法可以自动缓存和返回这些缓存的值吗?缓存应该基于传递给请求的参数(类似于记忆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的装饰器自己缓存它,我想知道是否有更快/更少的代码方式。

3 个答案:

答案 0 :(得分:4)

Feign不支持缓存。我更喜欢JCache(JSR-107),也许可以通过spring-boot-starter-cache described in the spring guide

使用它

JCache是​​EhCache,Hazelcast的专有实现的抽象,...因此可以更改实现,而对应用程序的影响非常小。起初我更喜欢EhCache 3。

答案 1 :(得分:1)

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

检查:Caching Data with Spring

答案 2 :(得分:0)

虚假客户端不支持缓存。

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