0

在节奏工作流活动中,在迭代多个实体时存储当前光标位置的最佳实践是什么?这将允许工作流在发生故障时从最后一个光标处开始。

存储当前光标的正确方法是什么?我们是否应该定期使用当前光标继续新的?

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
}
4

1 回答 1

0

回答我的问题后发现,我正在寻找的内容已经由 cadence go 客户端以心跳功能的形式提供:

  • GetHeartbeatDetails:从上次失败的尝试中提取心跳详细信息。这与重试策略结合使用。
  • RecordHeartbeat:为当前正在执行的活动发送心跳
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
}
于 2020-01-03T11:26:42.377 回答