我在eCommerce应用上工作。我在ddd中使用微服务。我有产品服务。它商店名称,描述等。定价,服务,商店产品价格和促销。类别、服务商店类别和产品类别。发货服务商店,所有关于发货数据和产品发货细节,重量,货运公司,isFreeCargo等。
我不想使用组合模式进行搜索。我创建了搜索服务,它存储所有服务的数据。定价,产品信息,发货信息,类别信息等。我将所有数据与事件联系起来。像cQRS一样,所有的服务都通过事件相互通信。
我的问题是,当CreateProductRequest涉及到产品服务时。它包括categoryId,价格,shipmentFirm等。我指的不仅仅是产品服务信息。我只保存标题,描述等在产品服务。在产品服务中没有价格或类别这样的数据。因为他们不属于这个领域。当产品创建和事件引发时,包含创建的产品id和其他服务信息的productCreatedEvent附带request.price、类别等。
其他服务监听此事件。并进行消费。定价可节省productId和价格。凯戈里拯救productId和categoryId ...
和搜索服务消费事件。但没有关于价格或类别的数据,因为他们刚刚发布。好的,我可以证明与事件的一致性,当价格变化或保存后的类别。但一开始,可能在2-3秒内不会有价格或类别。canI如何立即为搜索服务节省类别和价格。由于productCreatedEvent中没有价格和类别,因此非正规化和计算的数据只是引用is (如categoryId或非计算的is ),因此在自己的服务保存和发布事件(如ProductCategoryUpdated或ProductPriceCaculeted )后,搜索服务上将存在price.They
..。
发布于 2020-06-15 15:16:27
首先。我能看到的是,价格和类别服务与产品非常相关,它们本身并没有强大的功能,所以我建议你将这三个服务合并到一个服务中。如果价格服务被用来创建促销,我会做一个促销服务,它与产品服务通信,询问一个产品或一类产品的价格,并对它们应用相应的折扣。
第一个问题与我刚才所说的有关,因为价格、类别和产品是如此相关,当你创建一个产品时,你必须传递所有的数据,但因为它们是不同的服务,产品服务不应该知道这些信息。如果您想这样做,您应该创建独立于产品价格和类别,并且在创建这些价格和类别时,每个服务都应该发送一个priceCreated或categoryCreated事件,供感兴趣的任何人使用。例如搜索服务。
对于第二个问题,我认为最好的方法是第一个,首先因为它不会耦合服务。购物车服务只有ids,没有其他信息。当您想要查询另一个信息时,您只需像往常一样对适当的服务进行查询,因此不会创建耦合。其次,第二种选择的主要缺点是在所有其他服务中包含与购物车服务相关的逻辑。对于每个服务,你必须监听事件,而不是建立与服务相关的逻辑,比如更新一些信息,它们会将信息发送到另一个服务。它就像一条隐藏的命令消息
https://stackoverflow.com/questions/62374903
复制相似问题