在 Candece 中使用 Java 客户端启动工作流时,工作流上需要“executionStartToCloseTimeoutSeconds”。如果我有一个可以运行不确定时间的工作流,我该如何绕过这个限制?
2 回答
要求这个值是一个错误。我正在开发的新版本平台 ( temporal.io ) 将此值默认为无穷大。
不确定的时间 首先,我相信不确定的时间不是无限的时间。因为让工作流执行无限运行和增长是 Cadence 工作流中的反模式。看
Recommendation #5
这篇文章https://longquazheng.github.io/cadence-lab/book/learnings/what-should-be-in-a-workflow-or-an-activity-in-cadence.html 一个好的超时值可以保护您的工作流程无限增长。
因为不建议让工作流永远运行,因为它会导致工作人员和服务器的潜在性能问题,所以最初的想法是强制客户端提供超时值。我们没有提供默认值,因为很难为所有用例设置合理的默认值。
太小的默认值会更糟,因为没有人喜欢工作流在生产中意外超时。即使您可以使用“重置”命令重新打开它。
像 Maxim 建议的那样,太大的默认值比太小的值要好一些。但我个人不同意,因为这会导致客户忘记思考工作流将运行多长时间,以及工作流历史将增长多长时间。这也将在以后的某些时候成为生产问题。
我看到的最大问题是这个必需的选项不友好。它应该是编译错误而不是运行错误。我认为这可能是我们可以在 Cadence 中改进的地方——如果这是一个必填字段,请在编码经验中使其成为必填项。同时提供一些硬编码的假“无限”值来帮助一些边缘情况也可能有意义。
回到你的问题,如果你认为它是不确定的,我会建议使用一些假的无限值。一个很好的例子是 Cadence 系统工作流程:https ://github.com/uber/cadence/blob/11547ee6db5dd306cb507b263381a6ea94c3faf1/service/worker/scanner/workflow.go#L48