使用Cadence之上的定期作业对工作流程进行建模

时间:2019-08-16 12:20:43

标签: workflow cadence-workflow

用例:

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

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

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

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

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

我的方法:

我在Spring MVC中包装了API,从那里维护了Parent工作流程,该工作流程包含单个实体的所有Child工作流程的引用。

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

可以向每个子工作流程发送信号通知它们进入上述状态,并且它们还向其当前状态公开查询。

问题:

  1. 有没有一种可以更好地建模的方法?
  2. 如果相反,我必须像外部每月那样更改一次轮询时间,是否有办法?由于工作流中不允许进行更新,因此不建议在活动中使用Thread.sleep()等待最有效的实现方式。

我对编写工作流非常陌生,请提出我是否有任何错误。

1 个答案:

答案 0 :(得分:0)

  1. 如果每个用户的实体数受限制,则可以将所有实体保留在一个工作流程中。在这种情况下生孩子可能会增加不必要的复杂性。

  2. 我不明白您的意思是“工作流中不允许更新”。工作流可以随时更改其状态。要更改时间段,我会向工作流程发送一个带有时间段的信号,并根据该信号信息来更新时间段。