我们在系统中内置了一个操作(以下称为check()
)。开始此过程后,我们希望将此资源的状态从Not Started
更改为In Process
,并在完成后将其更改为Failed
或Successful
。
当前的实现是将所述资源的相应状态写入DB。这样的流程就像(假设运行成功):
用户单击检查->
check()
开始->在DB中将资源状态设置为In Process
->check()
完成->将资源状态设置为{{1} }在数据库中
在Successful
期间,如果用户单击前端的 Refresh ,则会触发对相应资源的check()
请求,从而检索当前状态({{ 1}})显示给用户。如果另一个用户尝试在当前GET
的资源上运行In Process
,则在检查数据库中资源的状态时,该请求将失败。
这是向数据库注册临时状态的正确解决方案吗?我觉得应该使用DB来持久记录,而不是将其用作闩锁。
答案 0 :(得分:1)
您可以使用event sourcing技术解决此问题。您可以将一系列状态转换存储为事件,而不是存储过程的最新状态。
对于每个传入命令(如您提到的检查或刷新),您:
要正确实现这种系统,请不要忘记对事件进行版本控制。这是版本控制指南:Versioning in an Event Sourced System