Azure Durable Functions 的 Activity 函数超时

Timeout in an Activity Function of Azure Durable Functions

在我的 activity 函数中我正在这样做

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

其中,

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

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

我需要 activity 函数等待其他服务中的进程完成。但是 activity 函数执行默认限制为 5 分钟。 根据不同的情况,我的 getStatus() 可能需要超过 2-3 小时或更长时间才能到达 return true

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

您有两个选择:

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

您能否将 getStatus 代码拆分为另一个 Activity 函数?如果是,则假设如下:

  1. ActivityFunction_A - 包含轮询 getStatus()

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

  4. 轮询 getStatus 的代码
  5. ActivityFunction_C - 包含 getStatus returns TRUE

  6. 之后的代码

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

ActivityFunction_A => ActivityFunction_B => ActivityFunction_C

使用 Monitor 模式。

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

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

如果您的工作流程确实不需要动态扩展到很多实例,您可以将您的函数迁移到 App Service Plan with AlwaysOn 开启。