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

节奏/时态工作流中的迭代活动

袁阿苏
2023-03-14

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

共有3个答案

楚煜
2023-03-14

每个活动调用都有自己的重试策略,因此如果活动i失败,只会重试活动i。

单于亮
2023-03-14

我的理解是,当在救援人员中检索历史时,这些迭代被重放。

因此,迭代 1 具有结果“x”,迭代 2 具有“y”,直到它到达尚未记录其结果的最后一个活动,然后开始实际调用活动。

通过这种方式,您可以确定工作流的状态,以及它的潜在变量,正是它终止时的状态。

所以它们没有被跳过,但也不会重新执行。

如果您不想在失败后重复数百次无操作迭代,您可以考虑使用“continueAsNew”而不是循环。这确保了新的工作流不会累积其他失败迭代的历史。

翟嘉年
2023-03-14

首先,了解工作流工作线程与活动工作线程之间的区别非常重要。

    < li >工作流工作器仅处理您的工作流代码(不在活动内部),并在Cadence API调用时停止,以安排活动、启动计时器等。工作流工作者接收“决策任务”,在那里他们执行工作流代码,从它暂停的最后一点直到下一个API调用。当使用粘性工作线程时,会有一个线程等待最后一次API调用来维护局部变量。如果worker还没有这样的线程,它将首先使用历史来重放工作流,以了解工作流应该在哪里等待。 < li >活动工作器仅在给定活动参数的“活动内部”执行。想象一下一个云函数。活动工作者将接收包含活动参数的活动任务,他们将执行活动并返回其结果。就是这样。

回到你的问题:当你的“工作流”工作者崩溃、重启、丢失或不知何故一个工作者收到一个它不知道其工作流的决策任务;然后,它将向Cadence服务器请求该工作流的历史记录。它将重放工作流,直到它消耗了它接收的全部历史,然后将基于当前的局部变量安排下一个活动。

因此,它将从相同的循环迭代继续,使用相同的局部变量和参数进行活动。

希望这回答了你的问题

 类似资料:
  • temporal.io如何与cadenceworkflow.io?如果根据节奏工作流服务启动一个新项目,应该使用什么?

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

  • 每个工作流都应在单独的工作流类中实现? 是否建议实现一个通用工作流类,在该类中,我们将使用传递给工作流的参数调用活动和触发计时器? 在我们的用例中,我们将从UI创建工作流,它将由最终用户创建。所以我们不能一开始就定义我们的工作流程。 这是推荐的方法吗?

  • 我在节奏工作流中引入了节奏版本控制,之后工作流在版本控制引入时停止执行。我收到以下错误: 2020-10-29T07:23:49.587Z调试内部/内部事件处理程序。go:465执行活动{“域”:“域_1”,“任务列表”:“任务列表_1”、“工作人员ID”:“6@cdnc-5ddb9ccbb5-5dt5j@tasklist“,”WorkflowType“:”do_work_workflow“,”W

  • 假设我们需要在用户完成购物车后生成订单。 这是我们生成订单的步骤: 生成一个处于挂起状态的订单(订单微服务) 授权用户信用(会计微服务) 将购物车的状态设置为关闭(购物车微服务) 批准订单(订单微服务) 为此,我们只需创建一个节奏工作流,为每个步骤调用一个活动。 问题1:如果用户再次打开购物车或刷新页面,客户端如何检测到购物车正在创建订单?(注意:假设我们的工作流还没有被工人执行) 我的问题1解决

  • 我有一个包含多个活动的工作流1,2,3…6,如果我的工作流在活动3之后因某个特定异常而失败,我计划启动一个子工作流,最终修复该异常。之后,我想重试父工作流以完成完整的流程。 我可以在子工作流中使用什么来实现上述场景? 我尝试查看具有< code>ContinueAsNew的工作流界面,该界面将创建一个新的工作流,并再次执行所有活动。