Cadence有Workflow Evolution的概念吗?

Does Cadence have the concept of Workflow Evolution?

"cadence有"工作流进化"的概念吗?

换句话说,我有一个模拟客户的“有状态演员”。最初,客户有两个字段,其中有一些修改它们的信号方法,一些获取状态的查询方法,以及该参与者的一些主要工作流程。假设我有 10 个这样的实例并且它们是长期存在的。

稍后我想添加第三个字段,也许还有另一种信号方法。我可以使用什么?

是的,Cadence 和 Temporal support the evolution of already running workflows. See Versioning 文档了解更多详情。

使用 Cadence 进行版本控制可以在这方面提供帮助。这是 documentation.

以文档为例,如下一行

err := workflow.ExecuteActivity(ctx, ActivityA, data).Get(ctx, &result1)

变成

var err error
v := workflow.GetVersion(ctx, "Step1", workflow.DefaultVersion, 1)
if v == workflow.DefaultVersion {
    err = workflow.ExecuteActivity(ctx, ActivityA, data).Get(ctx, &result1)
} else {
    err = workflow.ExecuteActivity(ctx, ActivityC, data).Get(ctx, &result1)
}

如果您有超过 2 个版本,它将如下所示:

v := workflow.GetVersion(ctx, "Step1", workflow.DefaultVersion, 2)
if v == workflow.DefaultVersion {
    err = workflow.ExecuteActivity(ctx, ActivityA, data).Get(ctx, &result1)
} else if v == 1 {
    err = workflow.ExecuteActivity(ctx, ActivityC, data).Get(ctx, &result1)
} else {
    err = workflow.ExecuteActivity(ctx, ActivityD, data).Get(ctx, &result1)
}

等等。您可以参考文档了解更多详情。