【问题标题】:Logic Apps - foreach loop very slow逻辑应用程序 - foreach 循环非常慢
【发布时间】:2018-03-16 11:43:02
【问题描述】:

我注意到 Azure 逻辑应用中的循环(使用 foreach)非常慢。作为一个例子,我循环了一个包含 8.000 个 JSON 节点(总共 1.6MB 数据)的 http 结果,处理大约需要 6 分钟,与在 .Net 应用程序中处理相比,这是一个非常长的时间。 测试是这样完成的: Test logic app, in this test the JSON data comes from a blob

对我来说,循环遍历结果集是一项常见任务,应该这么慢吗?你们中有人知道在逻辑应用程序中解析和循环数据的更好方法吗?

【问题讨论】:

  • 也许最好的做法是为此使用函数应用程序?在 Function App 中执行相同的解析大约需要 1 秒。

标签: azure azure-logic-apps


【解决方案1】:

它慢的原因是循环的并发默认为 20,最大值为 50。解决此问题的最佳方法是使用稍微不同的模式,在这种模式下,您将分批处理到另一个逻辑应用程序。例如,您将拥有一个逻辑应用程序来生成要循环的数组,然后创建另一个接受 http 请求作为触发器的逻辑应用程序。在设置下的第二个逻辑应用上启用拆分功能。现在将您的“工作”放在第二个逻辑应用程序中,然后返回第一个并进行最后一步将数组发送到第二个逻辑应用程序。使用此模式时,第一个逻辑应用程序将为数组中的每个项目初始化一次运行,它们将全部并发运行,而不是仅限于 for each 循环的并发运行。这是有关此功能的文档中的更多详细信息。 https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-workflow-actions-triggers#split-on-debatch

【讨论】:

  • 不错的答案,有趣的方法:-)
  • 谢谢菲尔。很有用。我现在实际上在“数据操作 - 选择”操作中使用的是因为我想要做的是将 JSON 节点转换为另一种格式,结果证明这个操作非常快(尽管它应该为每个隐式执行)。
  • @Phil 我面临着类似的问题。我的逻辑应用程序将 json 数据处理为标题和项目。这些项目在 For Each 循环步骤中需要很长时间。将在帮助下分裂。 ?我应该有两个逻辑应用程序,一个是主应用程序,另一个只是为了循环?
  • @phil 这是一个绝妙的方法。只需将 for 循环进程嵌套在另一个逻辑应用程序中,我就能将逻辑应用程序的持续时间从 4.58 小时减少到 10.33 分钟。谢谢先生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-30
  • 1970-01-01
  • 1970-01-01
  • 2012-10-12
  • 2020-04-09
  • 2017-04-27
  • 1970-01-01
相关资源
最近更新 更多