首页 > 解决方案 > 在 Cadence 上使用周期性作业建模工作流程

问题描述

用例:

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

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

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

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

实体可以在订阅期之间停止并在一段时间后可用。

我的做法:

我将 API 包装在 Spring MVC 中,从中维护一个父工作流,该工作流包含各个实体的所有子工作流的引用。

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

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

问题:

  1. 有没有办法可以更好地建模?
  2. 相反,如果我必须在外部每月更改一次投票周期,有没有办法做到这一点?由于工作流中不允许更新,因此不建议在活动中使用 Thread.sleep() 等待什么是最有效的实现方式?

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

标签: workflowcadence-workflow

解决方案


  1. 如果每个用户的实体数量是有限的,那么您可以将它们全部保存在一个工作流中。在这种情况下生孩子可能会增加不必要的复杂性。

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


推荐阅读