问题是您正在传递不同的changeID
要为同一部分维护不同的版本,您必须继续使用相同的 changeID,除非该 changeID 稍后被弃用但您想再次进行更改。
ChangID 是工作流中用于区分更改的不同部分的标识符。例如,您的工作流程:
String resA = activities.executeA();
String resB = activities.executeB();
如果要更改executeA=>executeAA,则变为:
int versionA = Workflow.getVersion("changeToA", Workflow.DEFAULT_VERSION, 1);
if(versionA == 1){
String resA = activities.executeAA();
}else{
String resA = activities.executeA();
}
String resB = activities.executeB();
然后稍后如果你想改变 executeAA=>executeAAA 那么它变成:
int versionA = Workflow.getVersion("changeToA", Workflow.DEFAULT_VERSION, 2);
if(versionA == 2){
String resA = activities.executeAAA();
}else if versionA == 1{
String resA = activities.executeAA();
}else{
String resA = activities.executeA();
}
String resB = activities.executeB();
这样您就可以维护多个版本。
然后如果你想改变executeB=>executeBB,那么你必须使用另一个changeID:
int versionA = Workflow.getVersion("changeToA", Workflow.DEFAULT_VERSION, 2);
if(versionA == 2){
String resA = activities.executeAAA();
}else if versionA == 1{
String resA = activities.executeAA();
}else{
String resA = activities.executeA();
}
int versionB = Workflow.getVersion("changeToB", Workflow.DEFAULT_VERSION, 1);
if(versionB == 1){
String resB = activities.executeBB();
}else{
String resB = activities.executeB();
}
这里的关键是了解 changeID,确实有点棘手,但是一旦掌握了它,它就很强大。
在您的代码中,因为您总是使用不同的changeID,所以已经启动的工作流程(工作流程 1 和工作流程 2)将始终获得 DEFAULT_VERSION(-1)。
在内部,当处于执行模式(非重播)时,getVersion 将在执行代码时将带有 MaxVersion 的 Marker 事件写入历史记录。
在重放模式下,如果 Marker 存在(changeID 必须匹配,否则标记被忽略),则从 Marker 返回版本,如果不存在(因为 workflow1 在其执行模式下没有 getVersion 代码),则使用minVersion(在您的情况下为 DEFAULT_VERSION)。(如果来自标记的版本低于 minVersion,它将返回错误)
查看更多文档:
对于 golang
对于java