在节奏工作流活动中,在迭代多个实体时存储当前光标位置的最佳做法是什么?这将允许工作流在发生故障时从最后一个光标开始。
存储当前光标的正确方法是什么?我们是否应该定期使用当前光标作为新光标继续?
func createReports(ctx context.Context, arg1 string, arg2 int) error {
cursor := ""
for {
result, err := someService.GetContracts(ctx, nil, cursor, 100)
if err != nil {
return err
}
for _, c := range result.Contracts {
err := aChildWorkflow.StartPipeline(ctx, arg1, arg2)
if err != nil {
return err
}
}
if !result.HasMore {
break
}
cursor = result.NextCursor
}
return nil
}
回答我的问题后发现,我所寻找的内容已经由cadence go客户端以心跳功能的形式提供:
func createReports(ctx context.Context, arg1 string, arg2 int) error {
cursor := ""
if activity.HasHeartbeatDetails(ctx) {
err := activity.GetHeartbeatDetails(ctx, &cursor)
if err != nil {
return err
}
}
for {
result, err := someService.GetContracts(ctx, nil, cursor, 100)
if err != nil {
return err
}
for _, c := range result.Contracts {
err := aChildWorkflow.StartPipeline(ctx, arg1, arg2)
if err != nil {
return err
}
}
if !result.HasMore {
break
}
cursor = result.NextCursor
activity.RecordHeartbeat(ctx, cursor)
}
return nil
}
Cadence使用tally发出一堆指标。可以使用Cadence SDK发出我自己的指标吗? Go SDK有,但当我刚刚调用它时,它似乎不起作用。我是否缺少一些必需的配置?
在Cadence/Temoral工作流编程中: < li >不允许使用本机线程库。例如,在Java中,线程必须通过< code>Async.procedure或< code>Async.function创建,而在Golang中,线程必须通过< code>workflow创建。去吧。那为什么呢? < li >有没有类似使用本机线程的竞争条件?例如,为了线程安全,应该使用< code>Hashtabl
我正在探索Cadence,有一个关于故障恢复的问题。我知道工作流是容错的(工作流历史被维护),以防工作流工作人员失败。我找不到活动工作人员的相同保证。例如:假设一个活动对服务A进行了RPC调用,这改变了一些远程对象状态;现在,让我们假设调用成功了,但活动工作人员在通知Cadence服务之前丢失了。在这种情况下,Cadence会在一个新工作人员上再次安排活动吗? 我知道如果服务A是幂等的,上述可能不
我有一个由多台机器组成的网络,我正在使用cadence go客户端。 1号机需要登记活动 机器2需要注册工作流程。 机器3需要启动以启动工作流。 cadence前端服务在另一台机器上。 如何使用 go 客户端执行此操作?此外,收银机是否仅将工作流/活动保存在内存中?我怎样才能把它们推到节奏服务,以便其他机器也能找到它们。
我在cadence workflow中有一个问题,我们可以在for循环中用不同的输入调用相同的活动吗?代码是确定性的吗?如果执行工作流的工作人员在执行过程中被停止并在稍后重新启动,cadence是否能够在重新构建工作流时重放事件。 例如,我有以下代码。 这里,第二个活动是在for循环中并行调用的。我的第一个问题是,这个代码是确定性的吗? 假设在循环5次迭代后,当i=5时,执行此工作流的工作程序终止
我正在关注https://cadenceworkflow.io/docs/go-client/workflow-testing/#setup,并看到带有。 如何设置(例如,使其包含测试名称)?我正在使用Go。