[英]Uber Cadence workflow versioning
Cadence 工作流程版本控制:
工作流 impl 具有以下代碼:
int version1 = Workflow.getVersion("change123", Workflow.DEFAULT_VERSION, 1);
logger.info("version1: {}", version1);
工作流 1 的開始:o/p -- version1:1
工作流 impl 的變化:
int version1 = Workflow.getVersion("change1234", Workflow.DEFAULT_VERSION, 2);
logger.info("version1: {}", version1);
工作流 2 的開始:o/p -- version1:2
工作流 impl 的變化:
int version1 = Workflow.getVersion("change12345", Workflow.DEFAULT_VERSION, 3);
logger.info("version1: {}", version1);
工作流 3 的開始:o/p -- 版本 1:3
重播工作流 2:o/p --version1:-1
重播工作流程 1: o/p --version1: -1
我期待低於o / p
重播工作流程 2: o/p -- version1: 2
重播工作流程 1: o/p -- version1: 1
所以這意味着我們一次只能維護兩個版本的工作流代碼,
當前版本和所有舊版本 getVersion 將給出 Workflow.DEFAULT_VERSION
如果我錯了,請糾正我!
問題是您正在傳遞不同的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,它將返回錯誤)
查看更多文檔:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.