【问题标题】:Microservice aggragate design?微服务聚合设计?
【发布时间】:2020-10-04 08:51:45
【问题描述】:

我开发了一个将 DDD 用作微服务的电子商务应用。

我有产品服务、品类服务、价格服务。

第一个问题:

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

我应该在产品模型中存储默认值等吗?

第二个问题:

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

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

我是否应该在一个事件中发送所有数据,例如 productCreatedEvent?或者通过 rabbitMQ 或 grpc 调用将 createProductCategory 等单独的命令发送到类别服务,并将 createProductPrice 发送到定价服务。

【问题讨论】:

    标签: domain-driven-design microservices


    【解决方案1】:

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

    如果这个划分是有意义的,因为价格和类别服务有自己独立于产品的功能和职责,我认为这些是答案

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

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

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

    【讨论】:

    • 感谢您的回答。我认为其他服务只需要productId。 Product 表示类别服务的 id。类别服务具有类别和属性。定价有折扣。它们需要单独的服务。您建议创建第一个类别和定价服务信息,然后使用参考保存产品。我的意见是先创造产品。然后使用已保存的 productId 保存其他服务数据。我需要将它们合并到搜索服务中,作为分面搜索的非规范化
    猜你喜欢
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 2017-09-21
    • 2018-08-23
    • 2022-08-19
    • 2019-09-10
    • 2018-04-28
    • 2017-06-25
    相关资源
    最近更新 更多