持久的功能保持执行

时间:2017-11-30 16:17:24

标签: azure azure-functions azure-durable-functions

我有一个持久的函数,它似乎没有崩溃但是在第一次调用之后只是继续执行相同的函数。在第一次调用之后尝试设置断点没有任何效果。

[30/11/2017 16:16:21] Function started (Id=972ee93c-ab61-4834-937c-207e8953821d)
[30/11/2017 16:16:21] Executing 'CompileFeatureObservations' (Reason='', Id=972ee93c-ab61-4834-937c-207e8953821d)
[30/11/2017 16:16:21] Starting Feature Compilation.
[30/11/2017 16:16:21] Function completed (Success, Id=972ee93c-ab61-4834-937c-207e8953821d, Duration=58ms)
[30/11/2017 16:16:21] Executed 'CompileFeatureObservations' (Succeeded, Id=972ee93c-ab61-4834-937c-207e8953821d)
[30/11/2017 16:16:21] b540b650019244719a7f3a61e45735f4: Function 'CompileFeatureObservations (Activity)', version '' completed. ContinuedAsNew: False. IsReplay: False. Output: (62123 bytes). State: Completed. HubName: DurableFunctionsHub. AppName: . SlotName: . ExtensionVersion: 1.0.0.0.

我能看到的唯一因素似乎是请求有效负载的大小,尽管它低于65kb的限制。

它使用文档中描述的扇出/扇入模式。当我的任务数组的大小达到~100时,它似乎停止工作,然后进入无限循环。

也许我超出了扇出限制?有没有办法控制旋转的“实例”数量?

我正在使用消费计划。

我能找到停止该行为的唯一方法是停止本地存储模拟器并删除并重新初始化基础localdb。

有没有人有进一步排查的建议?

1 个答案:

答案 0 :(得分:2)

我非常有信心问题是你的功能输出很大,这是一个已知的问题:https://github.com/Azure/azure-functions-durable-extension/issues/79

这里误导的是这个日志声明:

[30/11/2017 16:16:21] b540b650019244719a7f3a61e45735f4: Function 'CompileFeatureObservations (Activity)', version '' completed. ContinuedAsNew: False. IsReplay: False. Output: (62123 bytes). State: Completed.

它声称输出大约为60 KB,但此处报告的数字实际上不正确,因为它采用UTF-8编码。实际上,Azure存储使用UTF-32编码,因此实际大小可能远大于此。我会记下这需要修复。在beta2更新中,我们将正确报告并抛出异常。在此之后的某个时间,我们将支持任意大的返回值。

只是回答你问题的其他部分,扇出的程度不是问题。它只是返回值的大小。如果你可以缩小它,那么这应该可以解决你的问题。