我有一个Feign客户端,它从微服务中请求令牌。 由于我正在进行多次调用,我想缓存从Feign客户端收到的响应并使用Spring Guava缓存,但它似乎不起作用。我所拥有的只是配置类和Feign客户端上的注释。
我在堆栈溢出的某处读到Feign可能不支持@Cacheable注释。这是真的吗?
答案 0 :(得分:1)
最后,我设法解决了我的问题。 我最后做的是:
- >创建新的@Service注释类
- >使用@FeignClient注释注入接口
- >将所有@Cache相关注释(使用@Caching注释)放在从接口调用方法的方法上。
有效! :)
答案 1 :(得分:0)
比安卡(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;
在哪里调用伪客户端方法:
public class TestClass {
@Autowired
private MyFeignClient myFeignClient ;
public String callTest() {
...
return myFeignClient.test();
}
假客户端类保持不变。
带有缓存的服务类:
@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();
}