我有一个持久的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所描述的刷新按钮后,问题仍然存在,请参阅下面的日志。
进一步更新,即使
issue
在Github出现解决方案时,我仍然需要进行下面所示的双重配置设置,以便使我的功能可靠。
{
"version": "2.0",
"extensions": {
"durableTask": {
"HubName": "myHub",
"maxConcurrentActivityFunctions": 10,
"maxConcurrentOrchestratorFunctions": 1
}
},
"durableTask": {
"HubName": "myHub",
"maxConcurrentActivityFunctions": 10,
"maxConcurrentOrchestratorFunctions": 1
},
"functionTimeout": "00:10:00"
}
尽管指标看起来坚如磐石,但经过大量代码优化后,现在仍然存在问题。