【问题标题】:What's the right way to interrupt a long running Uber Cadence activity?中断长期运行的 Uber Cadence 活动的正确方法是什么?
【发布时间】:2019-06-01 00:05:49
【问题描述】:

如果我有一个长期运行的活动,类似于

func Activity(ctx context.Context) error {
    ticker := time.NewTicker(5 * time.Second)
    for {
        select {
        case <-ctx.Done():
            return ctx.Err()
        case <-ticker.C:
            if isServiceReady(ctx) {
                break
            }
        }
    }
    return nil
}

并且我希望能够从工作流中取消它(而不取消整个工作流),我将如何做到这一点?

我曾希望您可以在上下文完成通道上接收,然后在工作流中创建一个可取消的上下文,但这显然没有任何作用。

【问题讨论】:

    标签: cadence-workflow


    【解决方案1】:

    目前,要取消活动,必须心跳。 Cadence 服务在活动心跳返回值上搭载取消状态。因此,如果您在每次滴答时都开始检测信号并且您的检测信号间隔足够小(因为客户端不会在每次检测信号方法调用时调用服务),那么您的代码应该开始工作。

    未来我们计划添加带有特定工作人员任务列表的会话概念,以提供取消。添加后,取消将不依赖于发送的心跳。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-14
      • 2020-06-28
      • 2019-11-22
      • 2013-07-25
      • 1970-01-01
      • 2012-11-19
      • 2011-11-21
      相关资源
      最近更新 更多