【问题标题】:Packaging ORM entities in microservice design在微服务设计中打包 ORM 实体
【发布时间】:2017-06-07 14:09:51
【问题描述】:

我想构建一个微服务架构。我正在使用 Java 技术,例如 Spring、Hibernate 等。在这种情况下,我将实体作为 Java 类。例如,A 微服务有 A 实体,B 微服务有 B 实体,依此类推。所以,如果 A 和 B 之间存在一对多的关系,我需要将其中一个类导入到另一个类中来声明它。

// in A microservice
// need to import class of B like "import com.project.B", but can't
// because, it is different project.
@Entity
class A{
  @OneToMany
  B b;
}

//in B microservice
@Entity
class B{

}

但是,由于微服务设计,它们都位于不同的包或服务中。我是否应该创建另一个项目作为共享库,包括其中的所有实体,然后包含在每个微服务中?您有其他解决方案吗,或者这是一个解决方案?

【问题讨论】:

    标签: hibernate entity microservices


    【解决方案1】:

    经过长时间的研究,我找到了解决方案。我正在分享这些链接以帮助其他人稍后查看此问题。

    基本上,我们需要为外键添加一列。对于我的示例,我们需要添加 b_id 而不是 B 对象。然后我们设置B的id。当我们需要 B 时,我们会使用那个 id 来获取它。

    https://www.quora.com/How-do-I-handle-Foreign-Keys-with-a-Microservices-architecture

    http://microservices.io/patterns/data/database-per-service.html

    【讨论】:

    • 我在这里面临同样的问题,那么您如何控制一致性?在模型中为外键 ID 设置一个字段似乎不正确..
    • 我也有同样的感觉。但是,它看起来是正确的解决方案。为了保持一致性,使用消息代理(如 RabbitMQ)可能是一个很好的解决方案。你可以看看这个link
    • 有趣的阅读,所以与其将“外键属性”作为 b_id 您应该与 A 类有关系(可能没有完全实现)并确保它与发布-订阅事件队列的一致性。谢谢@Ugurcan!
    猜你喜欢
    • 2015-06-08
    • 2017-06-15
    • 1970-01-01
    • 2021-07-07
    • 2021-11-12
    • 2017-09-21
    • 2018-01-02
    • 2019-06-18
    • 2019-11-01
    相关资源
    最近更新 更多