2017-01-23 50 views
0

我想构建一个微服务体系结构。我正在使用Java技术,如Spring,Hibernate等。在这种情况下,我将实体作为Java类来使用。例如,微服务具有A实体,B微服务具有B实体等等。所以,如果A和B之间存在一对多关系,我需要将其中一个类导入其他类来声明它。在微服务设计中封装ORM实体

// 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{ 

} 

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

回答

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

+0

我在这里面临着同样的担忧,所以你如何保持控制权的一致性?在外键ID的模型中有一个字段看起来不正确。 –

+0

我对此有相同的感觉。但是,它看起来是正确的解为了保持一致性,使用消息代理(如RabbitMQ)可能是很好的解决方案。 你可以看看这个[链接](https://programmaticponderings.com/2017/05/15/eventual-consistency-decoupling-microservices-with-spring-amqp-and-rabbitmq/)。 –

+0

有趣的阅读,所以,而不是有一个“外键属性”作为B_ID你应该有一个关系类A(可能没有完全实现),并确保它与发布 - 订阅事件队列的一致性..谢谢@Ugurcan! –