DDD Microservice 保存相关服务数据

DDD Microservice Saving releated service data

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

当用户想要添加产品时。 CreateProductRequest 来为产品服务。请求包括产品数据和其他服务的数据,如 categoryId,未计算的价格。添加产品后。我需要发送其他服务数据。类别服务需要 productId 和 CategoryId。促销服务需要 productId 和价格。

创建电子产品事务提交后;

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

发布事件

2) 通过单独的命令发送到 services.I 使用 RabbitMQ 发送命令

而且如果没有事件随附 ID 的类别并且类别服务未保存怎么办。但产品已保存在产品服务中?

或者你有什么建议?

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

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

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

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