我有一个特定于域的任务管理的有界上下文。一些用户(称为协调者)可以创建任务并将其分配给另一个用户(称为执行者)。Executor 可以在稍后的某个时间完成任务。与此同时,协调者可以将任务重新分配给不同的执行者,后者负责完成该任务。第一个执行者失去了处理任务的能力。
现在情况变得复杂了,因为协调员在 web 应用程序(后端)工作,而执行程序在他们的移动应用程序(客户端)工作。因此,有界上下文有效地分布在许多节点之间。此外,移动应用程序可能会在相当长的一段时间(几天)内完全离线工作。
因此,可能是协调器将任务分配给 executor A
,然后 executor 离线。在metime coordinator 决定他不想等待 executor 完成任务A
并将任务重新分配给 executor B
。但是A
由于某些原因,执行者并不知道它并完成了任务。一段时间后执行者A
上线,现在我们必须在他的移动应用程序和后端之间一致地同步状态,遵循声称任务只能由其实际执行者完成的业务规则。执行者A
告诉后端“嘿,我用那个结果完成了任务”。后端听了 executorA
然后他看到当前分配给 executor 的任务B
。后端必须回答执行者A
:“对不起,目前任务不是你的,请删除手机上的任务,我拒绝你完成任务的结果。”
真实场景要复杂得多:执行者和协调者可以完全独立地完成多种动作,任务。然后在稍后的某个时间,他们应该按照业务规则正确同步状态。
您将如何在假设冲突解决(拒绝、补偿等)的分布式有界上下文中实现此类同步?