具有共享库依赖项的微服务

时间:2020-03-19 20:39:10

标签: java spring-boot microservices

我正在从事微服务项目,并且对最佳实践有疑问。

我们正在使用Java Spring,我们所有的模型都打包在一个JAR中。每个微服务都依靠此JAR起作用。对于微服务来说,依赖这样的超出其范围的包含模型的JAR可以吗,还是将这个JAR拆分为更好的做法?

2 个答案:

答案 0 :(得分:2)

Bartosz Jedrzejewski here

的一篇非常好的文章

引用他的文章中的相关部分...

如果服务代码应该完全分开,但是我们需要在客户端中使用可能复杂的响应-客户端应编写自己的库以使用服务。

通过使用客户端库使用服务,可以实现以下好处: 服务与客户端完全分离,没有服务相互依赖-库是独立的且特定于客户端。如果我们混合使用多种技术,甚至可能是特定于技术的 发行新版本的服务不会与客户端结合在一起-他们甚至可能不需要知道向后兼容性是否仍然存在,而是由客户端来维护库

客户端现在已干燥-没有不必要的代码被复制粘贴 与服务集成的速度更快-这是在不损失任何微服务优势的情况下实现的 该解决方案并不是全新的事物,它已经在Scott Logic项目中成功实现,在Sam Newman的“ Building Microservices”中被推荐(强烈推荐),并且在许多成功的微服务架构中也可以看到类似的想法。

还有一些陷阱,最好阅读整篇文章...

答案 1 :(得分:1)

共享域模型表明设计不良。如果服务共享一个域,则不应拆分它们。对于微服务,从事一项服务的团队应能够随时修改其域对象,而不会影响其他服务/团队。

虽然可以做一些例外,例如如果模型对象的非特定性足以在任何服务中重用。作为示例,几何结构域可以包含在几何结构库中。可能还有其他例外。