微服务集成设计?

时间:2020-06-15 00:50:30

标签: domain-driven-design microservices

我使用DDD作为微服务开发了一个电子商务应用程序。

我有产品服务,分类服务,价格服务。

第一个问题:

我不在产品服务中存储任何有关类别或价格的信息,因为它们属于自己的服务。

我应该在产品模型中存储默认值还是其他?

第二个问题:

当CreateProductRequest进入产品服务时。它在请求模型中包括类别和价格数据。创建产品后。我触发productCreatedEvent。它存储创建的产品ID,类别,价格信息。

其他服务使用该事件并保存其自己的数据库相关数据。例如,定价服务使用产品ID(价格)保存价格。类别服务保存产品ID和类别ID。

是否应该在一个事件(例如productCreatedEvent)中发送所有数据?或通过RabbitMQ或grpc调用将诸如createProductCategory之类的单独命令发送至类别服务,并将createProductPrice发送至价格服务。

1 个答案:

答案 0 :(得分:0)

首先,您应该考虑将产品服务与价格服务和类别服务区分开来是否有意义。我不知道每个人的职责是什么,但是只有在每个人都有自己的功能时才有意义。 我的意思是,如果没有产品就不可能有一个价格或一个类别,那么这三个将成为同一微服务的一部分。将有一个产品服务,其中包含每种产品的价格和类别。

如果这种区分是合理的,因为价格和类别服务具有独立于产品的自身功能和职责,那么我认为这些就是答案

第一个问题应该是首先创建类别和价格,当您需要创建产品时,您将引用价格ID和类别ID并将其传递给producto服务。

关于第二个问题,您不应将价格和类别信息发送给产品,因为这些不是产品服务必须知道的信息,因此,正如我之前所说,正确的做法是首先创建价格和类别调用自己的服务,然后发送带有引用的createProduct命令。

但是再一次,我认为最好的方法是将这三个服务合并为一个,因为它们看起来非常相关