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

人气:165 发布:2022-10-16 标签: node.js azure settimeout azure-durable-functions

问题描述

在我的活动功能中,我正在执行此操作

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

Where,

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

getStatus()是一个函数,它执行get请求以查看其他服务中的进程是否完成,并基于此返回truefalse

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

我能在这里做些什么?有什么建议吗?

推荐答案

您有几个选项:

选项A:使用监控模式+倒带

是否可以将getStatus代码拆分到另一个活动函数?如果是,则假定:

ActivityFunction_A-包含使用getStatus()

轮询的do-While循环之前的代码

ActivityFunction_B-包含使用maximum execution time of 10 minutes轮询getStatus的代码。

ActivityFunction_C-包含getStatus返回TRUE

后的代码

您现在可以编排工作流序列

ActivityFunction_A => ActivityFunction_B => ActivityFunction_C

使用Monitor模式。

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

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

如果您的工作流不需要动态向外扩展到许多实例,则可以在AlwaysOn打开的情况下将您的函数迁移到App Service Plan。

891