1

我有一个 saga-service ProcessCatalog 负责产品目录发布过程。

客户端应用程序向其发送 PublishCatalog 消息;每条消息都包含 catalogid 和项目列表。

我选择 catalogid 作为 SagaId。

ProcessCatalog 服务是一个长期运行的业务流程,它以适当的顺序排列其他业务服务。

我需要 ProcessCatalog 记住当前目录项的组成来推动发布过程。

如果同一个用户第一次点击 UI 按钮发送 PublishCatalog(catalogId=1, Itemlist={A,B,C} ) 然后更改目录组成 (itemList ={A,D,E}) 会发生什么在 UI 按钮上再次单击以发送相同 CatalogId 的另一个 PublishCatalog ?

如果我的 ProcessCatalog 端点配置了一个工作线程,那么一切正常(我认为)。但是如果工作线程大于 1 并且 2 条消息同时处理会发生什么?如果第二个线程在第一个线程之前完成执行会发生什么?

我问我这是业务设计错误还是正常的技术问题。

4

1 回答 1

0

由于 Saga 正在管理状态,因此这两条消息应该与同一个 Saga 相关联。在您的 Saga 中,您必须处理每条消息并解决任何冲突。业务规则必须定义如果在目录发布过程中更改目录会发生什么。

可能的情况是允许 Saga 完成,然后另一个 Saga 来修改目录。通常,对于产品目录,消费者只关心最新的内容,并且能够在初始发布后吸收更改。如果有大量工作要发布,那么您可能需要取消 Saga 并重新启动它。如果是这种情况,那么 UI 可能需要更多地变成一个建模工具,用户可以在其中使用目录,然后在他们完全满意时提交。

于 2012-09-17T13:33:35.787 回答