Saga 模式删除客户端数据和关联资源

问题描述 投票:0回答:1

我正在开发一个系统,该系统允许将附件关联到不同的业务实体,例如客户端。 为了简单起见,系统有以下数据库表:

  • Client:存储有关客户端的信息。
  • ClientAttachment:存储有关附件的元数据。实际附件存储在共享文件系统中。

我需要创建一个流程来完全删除客户端实体以及与其关联的任何信息。 这当然可以通过 Saga 模式来实现,但我正在努力确定 - 从设计角度 - 我可能需要哪些信息来支持该模式。

例如:

故事会是这样的:

  1. 从文件系统中删除文件。
  2. 从 ClientAttachment 表中删除记录。
  3. 从 Client 表中删除记录。

现在,我需要一种方法来防止在操作正在进行时上传更多附件,因此我想我必须向客户端表添加一个 ClientState(确定、正在删除、已删除等)字段验证这一点。

这是做这种事情的正确方法吗?有更好的方法吗?

design-patterns architecture microservices state-machine saga
1个回答
0
投票

您还可以探索您的数据库是否支持独占行锁,这正是您试图通过 ClientState 有效实现的目标。 另外,在查看事务时,请将文件操作放在最后。 这样,如果出现故障,您可以回滚数据库事务,而不会让事情处于非常脏的状态。

© www.soinside.com 2019 - 2024. All rights reserved.