Azure持久函数的活动函数中的超时

时间:2018-12-20 07:33:01

标签: node.js azure settimeout azure-durable-functions

在活动功能中,我正在这样做

do {
     await timeout(500);
} while (await getStatus() === false);

哪里

function timeout(ms) {
      return new Promise(resolve => setTimeout(resolve, ms));
}

getStatus()是一项执行get请求以查看其他服务中的过程是否完成并基于此返回truefalse的功能。

我需要我的活动功能等待其他服务中的过程完成。但是默认情况下,活动功能的执行限制为5分钟。 根据不同的情况,我的getStatus()可能需要2-3个小时或更长时间才能返回true

我在这里可以做什么?有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您有两种选择:

选项A:使用监控器模式+快退

您可以将getStatus代码拆分到另一个“活动功能”吗?如果是,则假定以下条件:

  1. ActivityFunction_A-在执行getStatus()

  2. 的do-while循环之前包含代码
  3. ActivityFunction_B-包含用maximum execution time of 10 minutes轮询getStatus的代码。

  4. ActivityFunction_C-在getStatus返回TRUE

  5. 之后包含代码

您现在可以编排工作流程顺序

ActivityFunction_A => ActivityFunction_B => ActivityFunction_C

使用Monitor模式。

由于任何一项活动功能都可能失败或超时,并且执行每个活动功能都有潜在的副作用,因此,您还应该使用Rewind功能(当前处于预览状态)来倒带和重播序列中第一个失败的活动函数。

选项B:使用应用服务计划

如果您的工作流确实不需要动态扩展到很多实例,则可以在启用App Service Plan的情况下将功能迁移到AlwaysOn