7

我有一个从微服务请求令牌的 Feign 客户端。由于我正在进行多次调用,我想缓存从 Feign 客户端收到的响应并使用 Spring Guava 缓存,但它似乎不起作用。我所拥有的只是 Feign 客户端上的配置类和注解。

我在堆栈溢出的某个地方读到 Feign 可能不支持 @Cacheable 注释。这是真的?

4

3 回答 3

8

最后,我设法解决了我的问题。我最后做的是:

-> 创建新的@Service 注释类

-> 使用@FeignClient 注解注入接口

-> 将所有与@Cache 相关的注解(使用@Caching 注解)放在从接口调用方法的方法上。

有用!:)

于 2018-04-11T07:52:32.673 回答
3

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();
    }
于 2020-11-04T10:52:41.827 回答
1

版本 3.1.0(作为 Spring Cloud 2021.0.0 的一部分)开始,根据文档,使用 Spring Cloud OpenFeign注释 Feign 客户端@Cacheable现在可以开箱即用。

您只需要确保:

于 2022-01-04T10:41:08.113 回答