在节奏工作流中的循环内调用相同的活动

问题描述

我在节奏工作流程中有一个疑问,我们是否可以在for循环中使用不同的输入调用同一活动?该代码是否具有确定性?如果执行该工作流程的工作人员在执行过程中停止并稍后重新启动,那么cadence在重新构造工作流程时将能够重播事件。

例如,我有以下代码。

   func init() {
    workflow.RegisterWithOptions(SampleWorkFlow,workflow.RegisterOptions{Name: "SampleWorkFlow"})
    activity.RegisterWithOptions(SampleActivity,activity.RegisterOptions{Name: "SampleActivity"})
    activity.RegisterWithOptions(SecondActivity,activity.RegisterOptions{Name: "SecondActivity"})
}

// SampleWorkFlow comment
func SampleWorkFlow(ctx workflow.Context,input string) error {

    fmt.Println("Workflow started")
    ctx = workflow.WithTaskList(ctx,sampleTaskList)
    ctx = workflow.WithActivityOptions(ctx,conf.ActivityOptions)

    var result string
    err := workflow.ExecuteActivity(ctx,"SampleActivity",input,"string-value").Get(ctx,&result)
    if err != nil {
        return err
    }

    for i := 1; i <= 10; i++ {
        value := i
        workflow.Go(ctx,func(ctx workflow.Context) {
            err := workflow.ExecuteActivity(ctx,"SecondActivity",value).Get(ctx,&result)
            if err != nil {
                log.Println("err=",err)
            }
        })
    }

    return nil

}

// SampleActivity comment
func SampleActivity(ctx context.Context,value,v1 string) (string,error) {
    fmt.Println("Sample activity start")
    for i := 0; i <= 10; i++ {
        fmt.Println(i)
    }
    return "Hello " + value,nil
}

// SecondActivity comment
func SecondActivity(ctx context.Context,value int) (string,error) {

    fmt.Println("Second  activity start")

    fmt.Println("value=",value)
    fmt.Println("Second activity going to end")
    return "Hello " + fmt.Sprintf("%d",value),nil
}

在这里,第二个活动在for循环内并行调用。 我的第一个问题是此代码是确定性的吗?

比方说,在循环的5次迭代之后,当i = 5时,执行此工作流程的工作人员将终止,如果工作流程在另一个环境中启动,则节奏可以重播事件。 工人?

你能回答我的问题吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)