代码之家  ›  专栏  ›  技术社区  ›  Murray Foxcroft

Azure持久函数即将休眠

  •  2
  • Murray Foxcroft  · 技术社区  · 5 年前

    我有一个持久的Azure函数(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;
        }
    }
    

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

    enter image description here

    进一步更新,即使 issue 在Github出现解决方案时,我仍然需要进行下面所示的双重配置设置,以便使我的功能可靠。

    {
      "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

    1 回复  |  直到 5 年前
        1
  •  1
  •   David Ebbo    5 年前

    你很可能遇到 this issue .

    现在问题已经解决了,但是如果您受到影响,那么您需要在修复结束后明确地同步一次触发器。要执行此操作,请转到门户中的函数应用程序,然后单击树中函数应用程序名称旁边的小刷新图标。你只需要做一次。

    然后您可以离开门户,它应该继续愉快地运行。

    推荐文章