【问题标题】:DDD Microservice Saving releated service dataDDD 微服务 保存相关服务数据
【发布时间】:2020-10-06 15:59:42
【问题描述】:

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

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

create eproduct 事务提交后;

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

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

如果事件中没有 id 的类别,并且类别服务没有保存,该怎么办。但是产品保存在产品服务中?

或者你有什么建议?

【问题讨论】:

    标签: domain-driven-design microservices


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-12
      • 2021-01-01
      • 2022-01-13
      • 2018-06-24
      • 2021-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多