gpt4 book ai didi

java - [Spring-Cloud][Maven][Docker]Feign接口(interface)应该放在FeignClients还是EurekaClients中?

转载 作者:行者123 更新时间:2023-11-30 02:24:30 25 4
gpt4 key购买 nike

EurekaServer:注册/公开服务

EurekaClients:提供服务

FeignClients:使用服务并提供 API

我正在使用 Feign 进行服务消费。我想知道feign接口(interface)(用@FeignClient注释的接口(interface))应该放在EurekaClients还是FeignClients中?

  1. 如果Feign接口(interface)放在EurekaClients中。

好:我只需要编写一份 Feign 接口(interface),并在 EurekaClients 中实现它。对于任何需要使用该服务的FeignClient,从EurekaClients导入这些接口(interface)即可使用。

坏处:模块依赖项可以很容易设置,但很难进行mvn package或使用docker进行生产。正如我所说的问题HERE .

  • 如果把 Feign 接口(interface)放在 FeignClients 中(我在网上能找到的几乎所有例子都是这样的)。
  • 好:易于构建。

    不好:有很多重复的代码。因为对于每个 FeignClient 我都需要重新编写 @FeignClient 注解的接口(interface)。如果嵌套的FeighClient和EurekaClient很多,维护起来就太困难了。

    那么对于我应该在哪里放置 Feigh 接口(interface)的良好实践有什么建议吗?

    最佳答案

    这是我们在项目中遵循的模式。每个服务有两个项目,例如:

    Service A
    model
    service

    所有 Controller 和其他业务相关的类,例如 DAO、服务、存储库类都保存在服务项目中。而 Controller 使用的并暴露给外界的模型则保存在模型项目中。 Controller 还实现了一个公开 REST API 的接口(interface)。该接口(interface)也保留在模型项目中。

    public interface AuthorService {

    @RequestMapping(method = RequestMethod.GET, produces = {
    MediaType.APPLICATION_JSON_VALUE}, value = "/authors/{id}")
    @ResponseBody
    Author getAuthor(@PathVariable("id") Integer id);
    }

    AuthorService 接口(interface)和模型 Author 保存在 model 项目中。实现 AuthorService 的 Controller AuthorController 保存在 the_service_ 项目中。

    假设 ServiceB 使用 ServiceA,则前者导入后者的 model 项目。在ServiceA的服务中,我们创建一个Feign接口(interface),例如,

    @FeignClient(name = "author", fallback = 
    AuthorServiceFallbackClient.class)
    public interface AuthorServiceClient extends AuthorService {
    }

    这种模式帮助我们减少了大量的代码重复。

    关于java - [Spring-Cloud][Maven][Docker]Feign接口(interface)应该放在FeignClients还是EurekaClients中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46001949/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com