春季启动微服务Maven架构

时间:2020-07-24 11:02:01

标签: spring maven microservices devops

我目前正在构建具有微服务架构的Spring Boot应用程序。 我正在寻找重用代码的干净方法。

我的想法是在共享模块中提取通用代码。 (例如,微服务中的模型类继承自的基类,在任何mvc控制器中可重用的接口,对于每个绑定上下文都相同的域代码)。 具体实现和仅服务模型类等在子模块(微服务)级别上。

我正在用Maven构建东西,还管理依赖项。我的问题是关于如何在这样的设置中构造Maven模块和依赖项。

共享库在哪里?如何以及何时通过依赖关系构建和引用它们? 使用BOM表来管理依赖关系并在需要时仅覆盖微服务中的特定版本是否很好? 宝的含量如何?如何以及何时建造?

我可以考虑一种我不太喜欢的处理方式:

  1. 具有一个(超级父级)maven pom,它处理依赖关系管理,并且可以包含在具有导入范围的子模块(微服务)中。 (BOM)

  2. 微服务poms构建其所有依赖项(包括BOM和共享模块)

问题:

在声明用于建立依赖关系的子模块时,pom也必须是pom类型,因此对于每个微服务模块,我还需要一个父pom

如果超级父项或BOM表包含声明所有子模块(微服务)的模块部分,由于存在循环依赖关系,因此我无法从ms级别构建它。

我为什么还要在Bom中声明子模块?因为在某些Intellij等IDE中,maven插件/支持在结构概述中包括了子模块。

能否请您指出一些可靠的建议,以可靠,干净的方式处理微服务的Maven架构? (尽可能少的代码/配置重复,高性能的构建等)

谢谢

1 个答案:

答案 0 :(得分:1)

您应该关注微服务体系结构的第一件事是将服务彼此隔离。这意味着您应该共享尽可能少的内容。

在过去6-7年中,我尝试了不同的方法时,我可以自信地说

  • 永远不要将父pom用于不同的微服务。每个微服务都可以根据我们自己的需求使用相同库的不同版本。最初使用父pom听起来可能很方便,但从长远来看,它会带来很多重大问题,需要隔离。

  • 永远不要尝试着重于微服务之间的代码重用。这并不意味着您不能使用实用程序库等。但是,共享模型类等将使微服务彼此绑定,这将严重破坏自由/隔离。相反,您应该依靠微服务之间的适当合同。

我看到您的方法主要是为了实现方便,但是随着时间的推移,您还应该关注其他事项,例如部署/发布,维护,组件的测试,这些可能会由于缺乏适当的隔离而受到损害。