首页 > 解决方案 > DDD 微服务 保存相关服务数据

问题描述

我有产品服务、品类服务、促销服务、搜索服务。

当用户想要添加产品时。CreateProductRequest 来产品服务。请求还包括产品数据和其他服务的数据,如 categoryId、uncalculated price 等。添加产品后。我需要发送其他服务数据。分类服务需要productId和CategoryId。促销服务需要 productId 和 price。

创建 eproduct 事务后提交;

1)我将所有数据放在 ProductCreatedEvent 中,包括保存的 productId、categoryId、未计算的价格等。每个服务都从事件中获取它需要的内容并保存到自己的数据库中。我用 RabbitMQ 发布事件

2)通过单独的命令发送到服务。我用 RabbitMQ 发送命令

如果没有事件附带的 id 类别和类别服务没有保存怎么办。但是产品保存在产品服务中?

或者你有什么建议?

标签: domain-driven-designmicroservices

解决方案


要回答这个问题,重要的是要记住命令和事件之间的区别。命令是做某事的请求。事件是对已经发生的事情的记录。一个关键的区别是命令可以被拒绝。

在查看您的用例时,将事件发布到其他服务是最有意义的。产品已创建,您正在通知其他关心更改的有界上下文。如果您发出命令,您就是在告诉其他有界上下文进行可能会或可能不会失败的更改。

也就是说,您每个有界上下文都可以接收事件并在自己的上下文中生成命令来更新其中管理的聚合。因此,这两者之间的区别是微妙的: - 向每个有界上下文发出命令 - 向每个有界上下文发出事件,然后它们可以根据需要触发命令

但是鉴于上述情况,产品创建的通知应该不会失败。它已经发生了。从那里,每个上下文都可以决定如何处理它。


推荐阅读