如何在 Java Spring 应用程序中缓存使用 Netflix 的 Feign 库发出的 HTTP 请求
How to Cache HTTP Requests made with Netflix's Feign library in a Java Spring app
在使用 Netflix 的 Feign 向服务发出 HTTP 请求的 spring 启动应用程序中,是否有一种简单的方法来缓存并自动 return 这些缓存的值?缓存应该基于传递给请求的参数(类似于记忆 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
周围使用装饰器自己缓存它,我想知道是否有 quicker/less 代码方式。
Springs @Cacheable
满足您的需求。
Feign不支持缓存。我更喜欢 JCache (JSR-107) and maybe use it via the spring-boot-starter-cache described in the spring guide
JCache 是 EhCache、Hazelcast 等专有实现的抽象,因此可以在对应用程序影响非常小的情况下更改实现。一开始我更喜欢EhCache 3.
Feign客户端不支持缓存
另一个更好的方法是创建一个服务 class,它调用 FeignClient 并在这个新服务 class.
的方法上放置缓存
在使用 Netflix 的 Feign 向服务发出 HTTP 请求的 spring 启动应用程序中,是否有一种简单的方法来缓存并自动 return 这些缓存的值?缓存应该基于传递给请求的参数(类似于记忆 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
周围使用装饰器自己缓存它,我想知道是否有 quicker/less 代码方式。
Springs @Cacheable
满足您的需求。
Feign不支持缓存。我更喜欢 JCache (JSR-107) and maybe use it via the spring-boot-starter-cache described in the spring guide
JCache 是 EhCache、Hazelcast 等专有实现的抽象,因此可以在对应用程序影响非常小的情况下更改实现。一开始我更喜欢EhCache 3.
Feign客户端不支持缓存
另一个更好的方法是创建一个服务 class,它调用 FeignClient 并在这个新服务 class.
的方法上放置缓存