在独立库和Springboot应用中使用Feign的区别

3
我想要创建一个 Some-Micro-Service 的客户端库 (Some-Micro-Service-Client),以便可以轻松地将其包含在 Some-Other-Micro-Service 的 pom 文件中。
我想使用 Feign,因为它可以使事情更容易,但是我不确定是否可以在我的架构中这样做。我看到的所有 Feign 示例都是从 SpringBootAppplication 类上使用 @EnableFeignClient 注解开始的,但由于我不想让客户端库被 "启动",所以我想知道是否可能只需将其包含在库中,而无需使用 EnableFeignClient 注解。
1个回答

2
是的,您可以在没有@EnableFeingClient注释的情况下使用feign。假设我们想从此API接收数据。在下面的示例中,我使用了Feign Core和Feign Gson依赖项。
首先,我们需要创建一个类,在其中获取json结果:
public class TODO {
    private long id;
    private long userId;
    private String title;
    private boolean completed;

    \\ getters and setters ...
}

此后,我们会声明一个接口,包含未来的rest客户端方法:

最初的回答:

接下来,我们将定义一个包含未来rest客户端方法的接口:

public interface TaskApi {

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

最终,让我们构建所需的REST客户端并进行测试请求:
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);
    }
}

想了解更多信息和可能性,您可以在官方存储库中阅读。

最初的回答

这真的很有帮助,但是由于我正在对FeignTest类进行单元测试,我无法正常模拟TaskAPI(使用@Mock声明,然后在taskApi.getTODO(any())上执行doReturn)。有什么帮助吗? - Dendin
FeignTest是一个漂亮的示例类,用于展示如何创建和使用Feign。在实践中,您可以在另一个地方创建TaskApi对象,并将其作为FeignTest类的构造函数参数。因此,您将有可能在单元测试中模拟TaskApi对象。 - Golov Pavel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接