【问题标题】:Is it possible to use Spring @Cache* on Feign client?是否可以在 Feign 客户端上使用 Spring @Cache*?
【发布时间】:2018-04-03 11:13:55
【问题描述】:

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

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

【问题讨论】:

    标签: java spring caching guava feign


    【解决方案1】:

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

    -> 创建新的@Service 注解类

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

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

    有效! :)

    【讨论】:

    • 你能解释一下吗?
    【解决方案2】:

    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】:

      使用 @Cacheable 注释 Feign 客户端现在可以使用 Spring Cloud OpenFeign 开箱即用,根据 the documentation,因为 version 3.1.0(作为 Spring Cloud 2021.0.0 的一部分)。

      您只需确保:

      【讨论】:

      • 现在我仍然需要理解为什么它似乎对我有用,而无需升级 Spring Cloud……
      猜你喜欢
      • 2016-09-04
      • 2015-12-05
      • 2018-04-19
      • 2015-05-30
      • 2020-03-26
      • 2019-01-25
      • 1970-01-01
      • 2019-07-27
      • 1970-01-01
      相关资源
      最近更新 更多