Azure耐用功能即将入睡

时间:2018-10-07 20:36:50

标签: azure-functions azure-durable-functions

我有一个持久的天蓝色函数(2.0),它基于this article对其进行永久编排。下面的代码。这可以正常工作,并且可以在大约20分钟内正常运行(例如大约50次迭代)。但是,这段时间过后它将进入睡眠状态并停止工作。如果我导航到Azure门户并仅单击功能应用程序,然后单击功能列表(即,我只是四处浏览但不更改任何设置或停止/启动任何操作),它会突然“醒来”,并且继续没有问题。日志中没有错误或问题,仅指示不活动时间段,然后恢复日志。我在某处缺少设置吗?

public static async Task Run([OrchestrationTrigger] DurableOrchestrationContextBase ctx, ILogger log)
{
    try
    {
        var config = ctx.GetInput<Config>();
        config = await ctx.CallActivityAsync<Config>("GetConfig", null);
        await ctx.CallActivityAsync("ProcessDetails", config);

        var nextCheckpoint = ctx.CurrentUtcDateTime.AddSeconds(config.PollingIntervalInSeconds);

        await ctx.CreateTimer(nextCheckpoint, CancellationToken.None);             
        ctx.ContinueAsNew(config);   
    }
    catch (Exception ex)
    {
        log.LogError($"[Error!][Failed with: {ex.ToString()}]");
        throw;
    }
}

按@davidebbo所述单击刷新按钮后,问题仍然存在,请参阅下面的日志。

enter image description here

进一步更新,即使GitHub上的issue似乎已解决,我仍然需要按如下所示进行双重配置设置,以使我的功能可靠。

{
  "version": "2.0",
  "extensions": {

    "durableTask": {
      "HubName": "myHub",
      "maxConcurrentActivityFunctions": 10,
      "maxConcurrentOrchestratorFunctions": 1
    }
  },
  "durableTask": {
    "HubName": "myHub",
    "maxConcurrentActivityFunctions": 10,
    "maxConcurrentOrchestratorFunctions": 1
  },
  "functionTimeout": "00:10:00"
} 

尽管对指标进行了严格的评估,但经过大量的代码优化后,现在仍然存在问题。

enter image description here

2 个答案:

答案 0 :(得分:2)

当您为Func使用消费计划时,可能会发生这种情况。这意味着在一段时间的感染后,天蓝色将使您的Func暂停,并且在系统中引发新事件或请求时,它将重新激活您的功能。 要解决此问题,您可以执行以下操作:

  • 使用App Service计划
  • 使用高级计划
  • 创建一些应用来预热您的功能。

您可以在this文章

中阅读更多详细信息

答案 1 :(得分:1)

您最有可能遇到this issue

该问题现已解决,但是如果您受到影响,则在解决此问题之后,需要显式同步触发器。为此,请转到门户中的Function App,然后在树中单击Function App名称旁边的小刷新图标。您只需要执行一次。

然后您可以离开门户,它应该保持愉快的运行状态。