【问题标题】:packing common code within a microservice application在微服务应用程序中打包公共代码
【发布时间】:2020-05-09 19:33:31
【问题描述】:

我即将开始一个微服务项目的工作,它有一个共享的 postgres 数据库,由 hibernate 访问。我对感兴趣 。打包代码库的最佳方式是什么。

多个微服务将访问数据库,这可能导致一个或多个微服务想要访问同一个 java DTO 对象。

我可以将所有 DTO 对象打包到公共 jar 并授予微服务对 jar 的访问权限,或者我在不同的微服务之间共享不同的 DTO,这可能会导致同一 DTO 的多个实例,但会保持单个微服务代码库的纯净。

我通常的首选方法是构建一个通用 jar 文件,以便在必须维护的代码量上进行编码。

在这个问题上是否有任何学校?

同样的问题也有一些共同的常量需要共享

【问题讨论】:

  • 在创建独立的微服务时,一般要避免共享东西。您首先声明了您想要分享的所有内容,这使得它更适合成为一个单体项目。
  • Hibernate 期望数据库的每个表都有一个 java DTO,因为一些微服务共享对同一个表的访问,一些读取容量是一个问题,因此问题
  • Hibernate 使用 entities (并不是每个表都需要它们),DTO 是另一回事。但这不是重点。共享数据库通常是微服务的一大禁忌,所以我告诉你,你遇到了架构问题(主要是你想要创建微服务,但你打算 创建一个伪装成微服务的单体应用程序)。

标签: java hibernate microservices packaging


【解决方案1】:

微服务不共享数据库,或更一般地说:

微服务不共享一个公共状态。

有三种可能的情况:

一个:您尝试拆分一个小的用例。那么你只需要一个微服务。

二:数据管理是一个单独的问题。然后,您应该创建一个独特的服务来处理数据。然后,您的其他服务将使用该服务。

三:您试图在一个数据库中管理多个不同的用例。然后,您的每项服务都会有一个专用数据库。

实际上,即使在执行 2 的情况下,您仍然可以执行 3,因为即使在服务被由于某种原因,所有这些都已关闭。

关于通用常量:它们可能需要冗余地打包到每个微服务中。不过,您可以共享一个通用库(阅读:maven artifact)。

【讨论】:

    猜你喜欢
    • 2016-11-05
    • 2017-07-27
    • 2016-03-28
    • 2019-10-18
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 2021-12-05
    • 2019-07-22
    相关资源
    最近更新 更多