当前位置: 首页 > 知识库问答 >
问题:

如何为Cadence活动(本地和常规活动,有无重试)设置适当的超时值?

夏奕
2023-03-14

所以超时值有很多:

对于本地活动:

  • SchduleTo关闭超时

对于不重试的常规活动:

    < li >计划启动超时 < li >计划关闭超时 < li >开始关闭超时 < li >心跳超时

然后是retryOptions中的更多值:

  • 过期间隔
  • 初始间隔
  • 退避系数
  • 最大间隔
  • 最大尝试次数

retryOptions可以应用于localActivity或常规活动。

我如何在期望的情况下一起使用它们?

共有1个答案

姚树
2023-03-14

使用超时的最简单方法:

重试的常规活动:

  1. 使用StartToClose作为每次尝试的超时时间
  2. 将ScheduleToStart和SchedueToClose留空
  3. 如果StartToClose太大(如10分钟),则将心跳超时设置为较小的值,如10秒。定期调用活动内部的heartbeat API
  4. 使用retryOptions。InitialInterval,retryOptions。退避系数,retryOptions。用于控制退避的MaximumInterval
  5. 使用retryOptions。ExperiationInterval作为所有尝试的总超时
  6. 保留retryOptions。MaximumAttempts为空

无需重试的常规活动:

  1. 使用ScheduleToClose进行总体超时
  2. 将ScheduleToStart和StartToClose保留为空
  3. 如果ScheduleToClose太大(如10分钟),则将心跳超时设置为较小的值,如10秒。定期调用活动内部的heartbeat API

本地活动而不重试:使用计划关闭以查找总体超时

带重试的LocalActivity:

  1. 使用“计划”作为每次尝试的超时。
  2. 使用 retryOptions.InitialInterval, retryOptions.BackoffCoefficient, retryOptions.MaximumInterval 来控制回退。
  3. 使用重试选项。。
  4. 将重试选项保留为空。

世界上的事情不重试更容易理解。因为凯蒂丝就是从它开始的。

>

  • 计划结束超时是从工作流的角度来看的总体端到端超时。

    计划到启动超时是活动辅助角色启动活动所需的时间。超过此超时,活动将向工作流返回计划启动超时错误/异常

    开始关闭超时是活动运行所需的时间。超过此值将返回到工作流。

    要求和默认值:

    • 要么提供“计划到关闭”,要么同时提供“计划开始”和“开始到关闭”。
    • 如果只有“计划到关闭”,则“计划到开始”和“开始到关闭”是默认的。
    • 如果仅提供“计划开始”和“开始到关闭”,则“计划结束=计划启动到关闭”
    • 所有这些都受工作流超时的限制。(例如,如果工作流超时为 1 小时,则设置为 2 小时“计划关闭”仍将得到 1 小时:计划结束=分钟(计划关闭,工作流暂停)

    那为什么是他们?

    您可能会注意到ScheduleToClose仅在ScheduleToClose时才有用

    因此,ScheduleToClose小于两者之和的主要用例是,人们希望限制活动的总超时,但给scheduleToStart或startToClose更多的超时。这是极其罕见的用例。

    此外,人们想要区分schduleToStart和StartToClo的主要用例是工作流可能需要对schduleToStart超时错误进行一些特殊处理。这也是非常罕见的用例。

    因此,您可以理解为什么在TL;DR中,我建议只使用 ScheduleToClose,而将其他两个留空。因为只有在极少数情况下,您才可能需要它。如果您无法想到用例,那么您就不需要它。

    本地活动没有“计划开始”/“开始”关闭“,因为它是直接在工作流工作线程内部启动的,不涉及服务器计划。

    心跳对于长时间运行的活动非常重要,以防止它卡住。不仅错误会导致活动卡住,常规部署/主机重启/故障也会导致活动卡住。因为没有心跳,Cadence服务器就无法知道活动是否仍在进行。在这里查看有关Cadence/SWF/StepFunctions中修复卡住计时器/活动的更多详细信息

    首先,这里的RetryOptions是用于服务器端回退重试的——这意味着重试由Cadence自动管理,而不与工作流交互。因为重试由Cadence管理,所以活动必须在Cadence历史记录中进行特殊处理,在活动关闭之前不能写入已启动的事件。这里有一些参考:为什么活动任务被计划但没有启动?

    实际上,工作流可以自行执行客户端重试。这意味着工作流将管理重试逻辑。您可以编写自己的重试函数,也可以在 SDK 中有一些帮助程序函数,例如 Cadence-java-客户端中的工作流.重试。客户端重试将立即显示所有启动事件,但对单个活动重试时,历史记录中会有许多事件。由于性能问题,不建议这样做。

    那么,这些选项意味着什么呢

    >

  • 到期间隔:

      < li >它取代ScheduleToClose超时,成为所有尝试活动的实际总超时。 < li >与其他三个超时选项一样,它也受工作流超时的限制。< code > ScheduleToClose = Min(ScheduleToClose,workflowTimeout) < li >每次尝试的超时是StartToClose,但是StartToClose默认为ScheduleToClose,如上所述。 < li>ScheduleToClose将扩展到expiration interval:< code > ScheduleToClose = Max(ScheduleToClose,ExpirationInterval),这发生在ScheduleToClose复制到ScheduleToClose和StartToClose之前。

    InitialInterval:第一次重试的间隔

    退隐系数:自我解释

    MaximumInterval:重试期间的最大时间间隔

    MaximumAttempts:最大尝试次数。如果存在ExpirationInterval,则当超过其中一个时重试停止。

    要求和默认值:

    需要MaximumAttemakes或ExirationInterval。如果未提供,则将ExirationInterval设置为工作html" target="_blank">流程超时。

    因为ExirationInterval总是在那里,事实上它更有用。大多数时候,使用MaximumAttempt更难,因为它很容易被backoff弄乱。系数(例如,当backoff系数时)

  •  类似资料:
    • 我是Android Studio的新手,我一直在寻找答案,但不幸的是,我无法做到。我在创建新时遇到问题 我的Android Studio和我之前观看的视频的对比: 我已经试过右键单击另一张照片上的确切内容,并在每个文件夹中的任何位置单击鼠标右键,但仍然找不到新的

    • 我是Kafka的初来乍到,有一些基本的怀疑。我试着做一个Kafka建立的多节点(主动-主动)。情况如下:- 运行单个zookeeper(端口:2181) 创办了三家Kafka经纪人(9092、9093、9094) 创建单个主题测试(分区:1,复制3) 使用代理列表启动生产者(9092,9093) 在9092、9093、9094上启动了使用者,但它们都在使用相同的主题。 现在我怀疑的是,当我从生产者

    • 我想把<代码>工作流程。睡眠调用我的Cadence活动之一,以便能够正确测试它(并模拟function产生的错误结果)。 在实现之前,我注意到两件重要的事情: 和是单独的类型。 每个活动的第一个参数 - - 是可选的,可以省略 我的尝试: 1.首次尝试 错误: "error":"无法解码活动函数输入字节错误:无法解码参数:0,*internal.Context,json错误:json:无法将对象散

    • 问题内容: 嗨,我在每个页面上的网站上都有一个菜单,我想将其放在自己的menu.php文件中,但是我不确定如何为我所在的任何页面设置 class =“ active” 。这是我的代码:请帮助我 menu.php: 问题答案: 如果您要在脚本中构建一个页面数组并将其与当前活动页面一起传递到视图文件,将会更容易: 使用像Smarty这样的模板引擎,您的menu.php看起来会更好:

    • 在节奏工作流活动中,在迭代多个实体时存储当前光标位置的最佳做法是什么?这将允许工作流在发生故障时从最后一个光标开始。 存储当前光标的正确方法是什么?我们是否应该定期使用当前光标作为新光标继续?