workflow - 在 Cadence 上使用周期性作业建模工作流程
问题描述
用例:
我有一个用户订阅的实体(订单项)。
假设该实体每月可用一次,直到用户从其列表中删除该实体或该实体不再有效,例如订阅已过期。
因此,实体可以处于的有效状态是可用、已停止、已终止。
当实体处于可用状态时,我想检查是否可以通过调用外部 API(定期)将其转换为订单,如果可以,则调用另一个 API 来创建订单。这些 API 保证本质上是幂等的。
实体可以在订阅期之间停止并在一段时间后可用。
我的做法:
我将 API 包装在 Spring MVC 中,从中维护一个父工作流,该工作流包含各个实体的所有子工作流的引用。
该层公开了以下 API POST (EntityId, State),它调用父工作流,在其字典中进行查找,然后通过引用子工作流传递必要的操作。
可以向每个子工作流发出信号以将其推入上述状态,并且它们还向其当前状态公开查询。
问题:
- 有没有办法可以更好地建模?
- 相反,如果我必须在外部每月更改一次投票周期,有没有办法做到这一点?由于工作流中不允许更新,因此不建议在活动中使用 Thread.sleep() 等待什么是最有效的实现方式?
我对编写工作流程非常陌生,如果我犯了任何错误,请提出建议。
解决方案
如果每个用户的实体数量是有限的,那么您可以将它们全部保存在一个工作流中。在这种情况下生孩子可能会增加不必要的复杂性。
我不明白您所说的“工作流程中不允许更新”是什么意思。工作流可以随时更改其状态。要更改周期,我会向工作流发送一个带有周期的信号,它会根据此信号信息更新周期。
推荐阅读
- oracle - powershell 执行oracle查询并导出csv
- javascript - 如何在循环中呈现 React Final 表单字段
- java - 比较Java中的2个以上(动态决定多少个列表)列表
- javascript - 如何将文本的结尾集中在
tag in HTML using Javascript?
- outlook-addin - 如何通过 OWA REST API 获取 > ~35MB 的附件内容?
- python - 选择 DataFrame.set_index 中除一列之外的所有列
- android - Scroll the VerticalGridView or RecyclerView by keeping focus on center element
- php - 让 php7 工作,但是当我尝试制作 mysqli 对象时,“找不到类 'mysqli'”
- php - 如何在我的网站上显示我的 github 公共存储库
- java - 带有 BusyBox 消息的 docker jdk alpine 8 上的 Spring 微服务