我有一个从微服务请求令牌的 Feign 客户端。由于我正在进行多次调用,我想缓存从 Feign 客户端收到的响应并使用 Spring Guava 缓存,但它似乎不起作用。我所拥有的只是 Feign 客户端上的配置类和注解。
我在堆栈溢出的某个地方读到 Feign 可能不支持 @Cacheable 注释。这是真的?
最后,我设法解决了我的问题。我最后做的是:
-> 创建新的@Service 注释类
-> 使用@FeignClient 注解注入接口
-> 将所有与@Cache 相关的注解(使用@Caching 注解)放在从接口调用方法的方法上。
有用!:)
Bianca 应该做的是在她的项目中添加一个@Service 注释类,她可以在其中使用@cacheable 注释。
使用 FeignClient 的传统方式是只有一个带有 @FeignClient 注解的接口,然后从其他项目/类中调用这些方法。她添加了一个 @Service 注释类,在其中她调用 feignclients 方法缓存任何她想要的东西。
FeignClient 类:
@FeignClient(name="my_feign-client", url = "http://myurl.com/")
public interface MyFeignClient {
@GetMapping("/test")
public ResponseEntity<String> test() throws FeignException;
调用feign客户端方法的类:
public class TestClass {
@Autowired
private MyFeignClient myFeignClient ;
public String callTest() {
...
return myFeignClient.test();
}
Feign 客户端类保持不变。
带缓存的服务类:
@Service
@CacheConfig(cacheNames={"test"})
public class TestService {
@Autowired
private MyFeignClient myFeignClient ;
@Cacheable
public String callCachedTest() {
...
return myFeignClient.test();
}
最后,调用缓存方法的类,即调用 feignClient:
public class TestClass {
@Autowired
private TestService testService ;
public String callTest() {
...
return testService.callCachedTest();
}
从版本 3.1.0(作为 Spring Cloud 2021.0.0 的一部分)开始,根据文档,使用 Spring Cloud OpenFeign注释 Feign 客户端@Cacheable
现在可以开箱即用。
您只需要确保:
@EnableCaching
spring-cloud-starter-openfeign
3.1.0+,因此这通常意味着导入spring-cloud-dependencies
版本 2021.0.0 +(他们在 2020 年切换到 calver)