- 你是对的,版本分配给一个
changeId
不是工作流实例。这允许独立地对工作流代码的每个部分进行版本控制。它允许在工作流已经运行并且没有到达代码的那部分时修复错误。
- 主要原因是验证。首次执行代码时工作流历史记录中的
getVersion
调用记录。maxVersion
因此,在重放时,即使版本发生了maxVersion
变化,也会使用正确的版本来保证正确的重放。当一个分支被删除时,minVersion
它会增加。想象一下,当存在需要删除分支的工作流时,错误地部署了此类代码。getVersion
它将检测到minVersion
大于历史记录中记录的值,并且将使决策任务失败,本质上是阻止工作流执行而不是破坏它。如果录制的版本高于maxVersion
参数,也会发生同样的情况。
更新:回复评论
换句话说,我试图提出一种情况,即使用许多不同的 changeIds 并且不超过 maxVersion=1 是不够的
如果您不执行删除分支,它们就足够了。但是如果你这样做了,那么验证最小版本是非常方便的。例如看下面的代码:
val version = Workflow.getVersion("change", 0, 2);
if (version == DEFAULT_VERSION) {
// before change
} else if (version == 1) {
// first change
} else {
// second hange
}
让我们删除默认版本:
val version = Workflow.getVersion("change", 1, 2);
if (version == 1) {
// first change
} else {
// second hange
}
现在看看没有最小值和最大值的版本:
var version1 = Workflow.getVersion("change1");
var version2 = Workflow.getVersion("change2");
if (version1 == DEFAULT_VERSION) {
// before change
} else if (version2 == DEFAULT_VERSION) {
// first change
} else {
// second hange
}
让我们删除默认分支:
var version2 = Workflow.getVersion("change2");
if (version2 == DEFAULT_VERSION) {
// first change
} else {
// second hange
}
请注意,如果使用最后一个示例代码的工作流被错误地路由到不知道版本 2,而只知道原始默认版本的工作人员,它将以不可预知的方式中断。第一个带有 min max version 的示例将优雅地检测问题。