工作流¶
注意!!使用工作流必须配置backend!!! ,另外若backend出错会导致工作流终止。
开启工作流¶
通过 Workflow()
开启工作流,然后通过 Send()
提交子任务。
使用 Send()
时,只有第一个任务才需要任务参数,后续任务的参数默认为前一个任务的返回值。
ser := ytask.Server.NewServer(...)
client:= ser.GetClient()
tId, _ := client.Workflow().
Send("group1", "add", 123, 44).
Send("group1", "add").
Done()
工作流同样支持通过 SetTaskCtl()
设置任务参数。( 设置延时任务时,只支持 RunAfter
)
对于下面的样例,第二个任务只有ExpireTime,不会继承第一个任务的设置
tId, _ := client.Workflow().
SetTaskCtl(client.RunAfter, 2*time.Second).
Send("group1", "add", 123, 44).
SetTaskCtl(client.ExpireTime, time.Now()).
Send("group1", "add").
Done()
获取工作流结果¶
你可以使用 GetResult()
获取最后一个任务的返回值。
也可以使用 GetResult2()
获取任务流的运行进度。
result, err := client.GetResult2(id, time.Second*2, time.Millisecond*300)
// 说明任务还未开始
if yerrors.IsEqual(err, yerrors.ErrTypeTimeOut) {
// ...
}
// status: waiting , running , success , failure , expired , abort
for name, status:= range result.Workflow{
fmt.Println(name, status)
}