0

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

[30/11/2017 16:16:21] 功能启动(Id=972ee93c-ab61-4834-937c-207e8953821d)
[30/11/2017 16:16:21] 执行'CompileFeatureObservations'(原因='',Id=972ee93c-ab61-4834-937c-207e8953821d)
[30/11/2017 16:16:21] 开始特征编译。
[30/11/2017 16:16:21] 功能完成(成功,Id=972ee93c-ab61-4834-937c-207e8953821d,持续时间=58ms)
[30/11/2017 16:16:21] 执行“CompileFeatureObservations”(成功,Id=972ee93c-ab61-4834-937c-207e8953821d)
[30/11/2017 16:16:21] b540b650019244719a7f3a61e45735f4:函数“CompileFeatureObservations(活动)”,版本“”已完成。ContinuedAsNew:错误。IsReplay:错误。输出:(62123 字节)。状态:已完成。集线器名称:DurableFunctionsHub。应用名称:. 插槽名称:. 扩展版本:1.0.0.0。

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

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

也许我已经超过了扇出限制?有没有办法控制函数“实例”的数量?

我正在使用消费计划。

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

有没有人有关于进一步排除故障的建议?

4

1 回答 1

3

我非常有信心,问题在于您的函数的大量输出,这是此处提到的一个已知问题: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 更新中,我们会正确报告这一点并抛出异常。在那之后的某个时候,我们将支持任意大的返回值。

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

于 2017-11-30T18:24:56.867 回答