当前位置: 首页 > 知识库问答 >
问题:

中断长时间优步节奏活动的正确方法是什么?

伊飞光
2023-03-14

如果我有一个长期的活动,比如

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
}

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

我曾希望您可以在上下文Done通道上接收,然后在工作流中创建一个可取消的上下文,但这显然无济于事。

共有1个答案

陈欣荣
2023-03-14

当前要取消活动,必须心跳。Cadence服务将取消状态附加到活动心跳返回值上。因此,如果您在每一次心跳时都开始心跳,并且心跳间隔足够小(因为客户端不会在每次心跳方法调用时都调用服务),那么您的代码应该可以开始工作了。

未来,我们计划添加一个会话的概念,其中包含一个特定于工人的任务列表,以提供取消。添加后,取消将不依赖于发送的心跳。

 类似资料:
  • 可以运行不需要连接到cadence服务器的本地活动。是否有适当的方式在本地运行工作流,以防发生cadence中断?我正在使用Go客户端。

  • 我有两个名为 w1 和 w2 的工人 W1主持活动A1。 如果w1出现故障,它是否会在w2上自动创建以处理服务器故障转移? 我试了一下,但是显示ActivityTimeOut错误,工作流失败。 难道我们没有其他选择来处理这样的故障转移吗? 在这种情况下,活动不会超时。由于工作机崩溃,它没有在预期时间内响应cadence服务。这是将它称为ActivityTimeOut的正确方法吗?相反,难道我们不能

  • 这可以被认为是在节奏工作流的循环中调用相同活动的后续问题:在活动迭代的情况下,工作流如何恢复?是继续调用第i个活动(跳过已经调用的活动)还是从0重新开始?如果是这样,如何编写工作流以跳过调用的活动(0-'k')?

  • 这是对我的问题的跟进,这里是工作流结构,促销优惠流程 我正在制作一个工作流,它依赖于发送cadence工作流信号的外部服务。在我当前的工作流程中,我正在监听诸如“接受”、“拒绝”、“取消”之类的信号。 此工作流还将在创建时收到到期日期。我只想在用户接受报价时启动计时器。 但是,如果在此工作流的中间,我们决定延长到期日期并为用户提供更多时间,我相信我需要向工作流发送信号,例如“重置”。下面是一个类似

  • 版本控制 API 功能强大。但是,使用它的模式,代码将很快变得混乱并且难以阅读和维护。 随着时间的推移,产品需要快速发展以引入新的业务/需求。有什么建议可以明智地使用此API。

  • null my Library的核心逻辑 客户将使用我们的库,他们将通过传递builder对象来调用它。然后,我们将通过使用对象构造一个URL,并通过执行该对象对该URL进行HTTP客户端调用,在将响应作为JSON字符串返回后,我们将通过创建对象将该JSON字符串按原样发送给客户。有些客户会调用,有些可能会调用方法,所以我需要在库中分别提供两个方法。 接口: 您将如何实现同步和异步方法给定上述标准