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

在Cadence之上使用周期性工作对工作流程进行建模

朱梓
2023-03-14

用例:

我有一个用户订阅的实体(订单项)。

假设该实体每月可用一次,直到用户从其列表中删除该实体或该实体不再有效(例如订阅已过期)。

因此,实体可以处于的有效状态为“可用”、“已停止”、“已终止”。

当实体处于可用状态时,我想检查它是否可以通过调用外部API(定期)转换为订单,如果可以,则调用另一个API来创建订单。这些API本质上保证是幂等的。

实体可以在预订期之间停止,并在一段时间后变得可用。

我的方法:

我在SpringMVC中包装API,从中我维护了一个Parent工作流,其中保存了各个实体的所有Child工作流的引用。

该层公开以下API POST(EntityId,State),它调用父工作流,在其字典中进行查找,然后通过引用子工作流传递必要的操作。

每个子工作流都可以发出信号以被推送到上述状态,并且它们还会向其当前状态公开查询。

问题:

  1. 有什么方法可以更好地建模吗?
  2. 如果我必须在外部更改轮询周期,例如一个月一次,有没有办法?由于工作流中不允许更新,并且不建议在活动中Thread.sleep()等待,什么是最有效的方法?

我对编写工作流程非常陌生,如果我犯了任何错误,请提出建议。

共有1个答案

危斯伯
2023-03-14

>

  • 如果每个用户的实体数量是有界的,那么您可以将所有实体保留在一个工作流中。在这种情况下,拥有孩子可能会增加不必要的复杂性。

    我不明白你说的“工作流中不允许更新”是什么意思。工作流可以随时更改其状态。要更改周期,我会向工作流发送一个带周期的信号,它会根据该信号信息更新周期。

  •  类似资料:
    • 对于长时间运行的活动,我们可以使用心跳来通知活动是正在运行还是已死。 我们有一个工作流,该工作流调用多个子工作流,其中包含一些基于父工作流生成的分组的参数。子工作流是长时间运行的工作流。 有没有办法让类似的检测信号从子工作流发送,因为这些工作流长时间运行,超时设置为几个小时?或者更确切地说,通知子工作流正在运行的方法是什么? 我们正在使用go-client来实现工作流程。

    • 在执行任务时,如果出现故障,希望定义配置以在一定间隔后重试并从失败的任务中恢复。是否可以实现恢复选项?

    • 将是什么 线程不足,无法执行工作流。如果此消息始终显示,请选择WorkerOptions。应减小maxConcurrentWorklfowExecutionSize或WorkerOptions。maxWorkflowThreads增加。 处于阻塞状态的工作流在内存中保持活动状态??处于等待状态的工作流是否持续检查条件??更多的 -

    • 在Cadence/Temoral工作流编程中: < li >不允许使用本机线程库。例如,在Java中,线程必须通过< code>Async.procedure或< code>Async.function创建,而在Golang中,线程必须通过< code>workflow创建。去吧。那为什么呢? < li >有没有类似使用本机线程的竞争条件?例如,为了线程安全,应该使用< code>Hashtabl

    • 为用户可视化节奏工作流的最佳方式是什么? 我想在一个高层次的视图中向用户展示工作流的不同步骤(类似于大多数食品配送应用程序的功能:下单- 我对向用户展示实际执行的节奏活动不感兴趣,因为我不希望他们看到我的工作流程的详细信息,我只想可视化他们感兴趣的某种高级阶段。 一种方法是保留工作流的高级描述,并在工作流代码本身内部进行状态转换(在启动活动 X 时将阶段 Y 标记为已启动等)。但是,我试图将这个问

    • Cadence工作流需要具有确定性,这意味着如果使用相同的输入参数执行工作流,工作流预计会产生完全相同的结果。 当我作为Cadence的新用户了解到上述需求时,我想知道当需要打破确定性的变化时,我如何才能长期维护工作流。 一个示例场景是,您有一个连续执行Activity1和Activity2的工作流,然后您需要更改这些活动的顺序,以便工作流在Activity1之前执行Activity2。还有许多其