【问题标题】:DDD how to Communicate for search serviceDDD如何为搜索服务进行通信
【发布时间】:2020-06-16 20:32:40
【问题描述】:

我从事电子商务应用。我使用带有 ddd 的微服务。我有产品服务。它存储标题描述等。定价服务存储产品价格和促销。类别服务商店类别和产品类别。 Shipment service store所有关于发货数据和产品发货细节的dweight cargo公司isFreeCargo等。

我不想使用组合模式进行搜索。我创建了存储所有服务数据的搜索服务。价格、产品信息、发货信息、类别信息等。 我将所有数据与事件连接起来。像 cQRS 因此,所有服务都通过事件相互通信。

我的问题是; 当 CreateProductRequest 来到产品服务。它包括 categoryId、price、shippingFirm 等。我的意思不仅仅是产品服务信息。 我只在产品服务中保存标题描述等。产品服务中没有价格或类别等数据。因为他们不属于这个域。当产品创建和事件引发 productCreatedEvent 包含创建的产品 id 和其他服务信息时带有 request.price ,类别等。

其他服务监听这个事件。并消费。定价保存 productId 和 price。 Cagegory 保存 productId 和 categoryId ...

搜索服务也消费事件。但是没有关于价格或类别的数据,因为它们刚刚发布。 Okey 我可以在价格变化或类别保存后证明与事件的一致性。但起初可能不会有 2-3 秒的价格或类别。 如何立即保存搜索服务的类别和价格。因为 productCreatedEvent 中没有价格和类别的非规范化和计算数据。只有 categoryId 之类的参考 Id 或未计算的价格。在自己的服务保存和发布 ProductCategoryUpdated 或 ProductPriceCaculeted 等事件后,它们将存在于搜索服务中

.

【问题讨论】:

    标签: events domain-driven-design microservices e-commerce ddd-service


    【解决方案1】:

    首先。我可以看到价格和类别服务与产品非常相关,它们本身并没有强大的功能,所以我建议您将它们三者合并为一个服务。如果使用价格服务来创建促销,我会做一个促销服务,它与产品服务通信,询问产品或产品类别的价格,并应用相应的折扣。

    第一个问题和我刚才说的有关,因为价格、品类和产品关系密切,你在创建产品时必须传递所有数据,但是因为它们是不同的服务,所以产品服务不应该是知道这些信息。如果您想这样做,您应该独立于产品创建价格和类别,并且在创建这些价格和类别时,每个服务都应该发送一个 priceCreated 或 categoryCreated 事件,任何有兴趣的人都会使用它。例如搜索服务。

    对于第二个问题,我认为最好的方法是第一个,第一个,因为它不会耦合服务。购物车服务只有 id 没有其他信息。而当您想查询其他信息时,您只需像往常一样查询正确的服务,因此不会创建耦合。 其次,第二个选项的主要缺点是您将与购物车服务相关的逻辑包含在所有其他服务中。对于每个人,您必须监听事件,而不是像更新某些信息那样制作与服务相关的逻辑,而是将信息发送到另一个服务。它就像一个隐藏的命令消息

    【讨论】:

    • 首先感谢您的回答。我想合并它们,但实际上它们需要拆分。它们都是大域。类别具有属性和属性值。定价有促销。他们只需要 productId 。我想将它们合并到搜索服务中,作为分面搜索的非规范化等。问题是当搜索服务使用 productCreatedEvent 时还没有类别或价格数据。
    猜你喜欢
    • 2022-11-02
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 2016-01-08
    相关资源
    最近更新 更多