问题标签 [cadence-workflow]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cadence-workflow - 指定超时前的DecisionTaskTimedOut
我有一个案例,当超时设置为 10 时,决策在 5 秒后超时:
它使用在本地 docker 中运行的 Cadence 服务,我可以可靠地重现它。
cadence-workflow - 设置第二个值时 MutableSideEffect() 出现恐慌
我们正在编写一个 .NET Cadence 客户端,并且对MutableSideEffect()应该如何工作感到有些困惑。我们一直认为传递的ID本质上是一个变量名,开发人员应该能够在工作流中更新可变值。但是,当我们尝试这样做时,第二个MutableSideEffect()调用失败并出现以下恐慌:
我们使用了问候工作流示例来进行这些调用:
我们是否正确地考虑了这一点?
cadence-workflow - 在同一工作流服务客户端上重新启动工作器时工作流执行失败
我们正在编写一个 .NET Cadence 客户端,在单元测试工作流时遇到了问题。当我们启动一个工作流程,执行一个工作流程,停止工作流程,再次启动它,然后尝试执行另一个工作流程时,第一个工作流程完成,但第一个工作流程之后的任何工作流程在调用期间挂起,最终因超时client.ExecuteWorkflow()
而失败。START_TO_CLOSE
我通过修改 greetings cadence-samples工作流程来复制这种行为。请参阅中的循环func main()
:
这不是阻塞问题,可能不会在生产中出现。
背景:
我们(Jeff Lill和我)在 .NET Cadence 客户端的单元测试工作流程中注意到了这个问题。当我们单独运行我们的工作流测试时,它们都通过了,但是当我们一次运行多个(顺序地,而不是并行地)时,我们会看到上述行为。dispose()
这是因为在测试完成(通过或失败)后调用的 .NET Cadence 客户端方法中进行了清理。处置行为之一是停止在测试期间创建的工人。当下一个测试运行时,使用相同的工作流服务客户端创建新的工作人员,这就是问题出现的地方。
cadence-workflow - 如何对必须在其中一个步骤中返回结果的工作流进行建模
假设我有一个工作流程:
- 做出指令
- 处理付款
- 向第三方发送 API 调用
- 等待第三次通过暴露的 webhook 调用我的 API
当我做:
workflow.makeOrder();
这会阻塞,所以在步骤 1-4 完成之前我无法得到结果。
但如果我异步执行:
我无法获得第 1 步的结果。我该如何实现?
cadence-workflow - 如何使用 Uber Cadence 设计一个无状态工作者只处理一次消息
请帮助我们采用 Cadence :D
这是当前的设计。一些无状态工作者从一个集中的队列中提取消息来处理它。复杂的业务逻辑涉及工作人员以及利用单独的 Redis 集群作为远程分布式缓存的 Deduper 功能(使用共识的强一致性)。此缓存仅存储消息 ID 及其状态“进行中”、“完成”和“未开始”。显然,工人应该处理未完成的消息。
我个人想重新考虑所有可能的解决方案。我想到了工作流模型,因为我对 AWS SWF 有过愉快的体验。由于我们所有的服务都是用 go 编写并在我们自己的数据中心上运行,我想试试 Uber Cadence(SWF 的开源)。
我观看了许多来自 Uber 用户的视频,我认为第一步是在新的工作流程中创建一个活动作为开始,然后将其分解为多个活动,或者在我们将其迁移到 AWS 之后再将其分解为 AWS lambda。
所以我在这里列出所有要求
- 避免多个工作人员两次处理一条消息。
- 50k req/s 所以需要可扩展的解决方案
- p99 的低延迟,希望 < 300 毫秒
现在只有第一个要求是一个令人头疼的问题,因为 Redis 缓存是一个远程缓存集群。prod 中存在一些连接问题,我们真的想摆脱它以避免复杂性和额外的网络跃点。
问题:
- 所以我想知道在切换到Cadence时如何设计重复数据删除器?
通过阅读文档,Cadence 在域内提供了工作流 ID 唯一性功能。也许我可以使用消息 ID 作为工作流 ID 的一部分,例如 WF-00001,以保证域内没有重复。只要我只使用一个域,就不会有问题。然后我不知道这种方法的局限性。例如,域内允许的工作流数量。我们有 50k 消息处理速率/s(峰值)
我不确定这是否是正确的方法。欢迎更多想法。
- 是否有一个网页列出了 Cadence 的所有限制?我们需要它来评估 Cadence。
谢谢
SWF 阶梯函数 Uber Cadence
workflow - 用于管理传入文件处理的工作流平台
一般来说,我有一个我希望能够监控的工作流程。工作流应该在新文件到达时或在某些预定时间开始,即我希望能够在工作流中插入新的“作业”,并通过多个不同的任务和步骤来处理文件。我希望能够监视通过任务的每个文件。每个任务的队列和分配负载可能由 Celery 管理,但也尚未决定。
我看过 Apache Airflow,据我目前了解,它更倾向于监控许多不同的工作流程,这样每个工作流程大部分都是从头到尾运行,而不是在之前的流程的开头添加新文件上一次运行结束。Cadence 工作流程似乎可以满足我的需要,但也似乎有点矫枉过正。
我并不期待这里有一个具体的最终解决方案,但我希望能提出更多这样的解决方案,我可以研究并适合上述解决方案。
workflow - 在 Cadence 上使用周期性作业建模工作流程
用例:
我有一个用户订阅的实体(订单项)。
假设该实体每月可用一次,直到用户从其列表中删除该实体或该实体不再有效,例如订阅已过期。
因此,实体可以处于的有效状态是可用、已停止、已终止。
当实体处于可用状态时,我想检查是否可以通过调用外部 API(定期)将其转换为订单,如果可以,则调用另一个 API 来创建订单。这些 API 保证本质上是幂等的。
实体可以在订阅期之间停止并在一段时间后可用。
我的做法:
我将 API 包装在 Spring MVC 中,从中维护一个父工作流,该工作流包含各个实体的所有子工作流的引用。
该层公开了以下 API POST (EntityId, State),它调用父工作流,在其字典中进行查找,然后通过引用子工作流传递必要的操作。
可以向每个子工作流发出信号以将其推入上述状态,并且它们还向其当前状态公开查询。
问题:
- 有没有办法可以更好地建模?
- 相反,如果我必须在外部每月更改一次投票周期,有没有办法做到这一点?由于工作流中不允许更新,因此不建议在活动中使用 Thread.sleep() 等待什么是最有效的实现方式?
我对编写工作流程非常陌生,如果我犯了任何错误,请提出建议。
cadence-workflow - 在 Cadence 工作流程中轮询外部状态转换
我有一个 Cadence 工作流程,我需要轮询外部 AWS API 直到特定资源转换,这可能需要一些时间。我假设我应该让每个单独的“checkStatus”请求一个活动,并让工作流执行睡眠/检查循环。但是,这意味着我的工作流程历史记录中可能有无限数量的活动调用。这很令人担忧吗?有没有更好的方法来实现这一点?
cadence-workflow - 子工作流可以异步执行吗?
我正在尝试实现一个永久的工作流程,该工作流程从一个阻止直到传递消息(即 Redis' BLPOP
)的活动开始。完成后,我想异步启动一个新的工作流以进行某种处理并ContinueAsNew
立即返回。
我尝试使用子工作流程启动处理工作流程。我观察到的是,我的父工作流程在子执行之前完成。除非我处理返回的未来,但我真的不想这样做。
这样做的正确方法是什么?是否可以在工作流中启动新的常规工作流?此类操作会作为工作流的一部分还是在活动中实施?
先感谢您!
cadence-workflow - 优先级如何在节奏工作流程中发挥作用?
我在活动描述中找到了这个注释:
多个优先事项。每个优先级一个任务列表,每个优先级有一个工作池。
我想知道它是如何工作的。
我是否理解正确,这一切都是通过不同的任务列表实现的?例如,如果我希望以更高的优先级处理某些工作流或活动,那么我应该怎么做?也许有一些关于优先级如何工作的例子?