【问题标题】:Using Feign in a standalone library vs a Springboot application在独立库中使用 Feign 与 Springboot 应用程序
【发布时间】:2019-10-16 10:19:10
【问题描述】:

我想为 Some-Micro-Service 创建一个客户端作为库 (Some-Micro-Service-Client),这样它就可以轻松地包含在 Some-Other-Micro-Service 的 pom 中。

我想使用 Feign,因为它使事情变得更容易,但我不确定这是否可以在我的架构中实现。我看到的所有 Feign 示例都是从在 SpringBootAppplication 类上使用 @EnableFeignClient 注释开始的,但是由于我不希望客户端库必须“启动”,所以我想知道是否可以仅包含它在库中不使用 EnableFeignClient 注解。

【问题讨论】:

    标签: java spring-boot microservices spring-cloud-feign


    【解决方案1】:

    是的,您可以使用 feign 而不使用 @EnableFeingClient 注释。假设,我们想从this API 接收数据。在下面的示例中,我使用了 Feign CoreFeign Gson 依赖项。

    首先我们需要创建一个类,我们将在其中得到json结果:

    public class TODO {
        private long id;
        private long userId;
        private String title;
        private boolean completed;
    
        \\ getters and setters ...
    }
    

    之后我们用未来的 rest-client 方法声明接口:

    public interface TaskApi {
    
        @RequestLine("GET /todos/{id}")
        TODO getTODO(@Param("id") int id);
    }
    

    最后,让我们构建所需的休息客户端并发出测试请求:

    public class FeignTest {
    
        private static final String API_PATH = "https://jsonplaceholder.typicode.com";
    
        public static void main(String[] args) {
            TaskApi taskApi = Feign.builder()
                    .decoder(new GsonDecoder())
                    .target(TaskApi.class, API_PATH);
            TODO todo = taskApi.getTODO(1);
        }
    }
    

    有关更多信息和可能性,您可以阅读official repository

    【讨论】:

    • 这真的很有帮助,但是由于我正在对 FeignTest 类进行单元测试,我无法正常模拟 TaskAPI(在声明​​中使用 @Mock,然后在 taskApi.getTODO(any()) 时使用 doReturn . 对此有何帮助?
    • FeignTest 是一个漂亮的示例类,用于演示如何创建和使用 feign。在实践中,您可以在其他地方创建 TaskApi 对象并将其作为 FeignTest 类的构造函数参数。因此,您将有可能在单元测试中模拟 TaskApi 对象。
    猜你喜欢
    • 2012-03-29
    • 2015-01-09
    • 2021-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    相关资源
    最近更新 更多