我有HTTP call
调用API和gives 500 records
。
500条记录花费了很长时间,所以我正在考虑将其分支 在5个不同的分支中,我将分别传递100条记录来执行 事半功倍,有什么建议?
我想create branches which will process 100 records for each branch
但how to send 100 separate records to each branch?
我想这样做是为了节省执行时间,我也尝试在foreach中进行并发,但是仍然需要太多时间来处理500条记录,因此尽管我可以将这些记录分成多个分支
我确切可以在哪里使用SplitOn
"HTTP_2": {
"inputs": {
"headers": {
"Authorization": "@{concat('Bearer ',variables('accesstoken'))}",
"Ocp-Apim-Subscription-Key": "demovalues"
},
"method": "GET",
"uri": "http://demo"
},
"runAfter": {
"Set_variable_AccessToken": [
"Succeeded"
]
},
"type": "Http"
},
"foreach": "@body('HTTP_2')?['results']",
"runAfter": {
"Increment_variable_SkipVariable": [
"Succeeded"
]
}
对于SplitOn
属性,我试图像这样添加-但在保存逻辑应用程序时出错。
"HTTP_2": {
"inputs": {
"headers": {
"Authorization": "@{concat('Bearer ',variables('accesstoken'))}",
"Ocp-Apim-Subscription-Key": "demovalues"
},
"method": "GET",
"uri": "http://demo"
},
"runAfter": {
"Set_variable_AccessToken": [
"Succeeded"
]
},
"type": "Http",
"splitOn": "@Body('HTTP_2')?['results']",
}
添加后出现错误-请求内容无效,可能 不反序列化:“在以下对象上找不到成员'splitOn' 输入“ FlowTemplateAction”。路径 'properties.definition.actions.Run_the_code_until_all_records_completed_with_each_500_interations.actions.HTTP_2.splitOn', 第1行,位置494638。'
答案 0 :(得分:2)
逻辑应用程序在触发器中提供一个SplitOn
属性,以对数组进行分批处理。当您要处理消息中的数组或任何重复的元素并分别处理它们并减少每个循环的执行时间时,它适用于此。
对于基本用途,您可以参考官方文档:Trigger multiple runs。而且,如果您要调用sql或Azure表等来获取记录,则可以使用两个逻辑应用来实现它。该维基可以为您提供帮助:Azure LogicApp Debatching。
此方法的优点在于,每个子消息都立即独立于其他子消息开始处理。如果一条消息在进一步处理期间失败,则不会影响其他消息,因此可以在子消息的级别上进行异常处理。
提醒,如果具有SplitOn
属性,它将生成逻辑应用程序的单独实例并并行处理各个订单。
更新:以下是我用于处理存储表实体的示例。两者都是HTTP触发的,父级一个获取表值,然后调用子级一个(将Content-Type
= application/json
设置为实体主体)。
然后一个孩子只需在触发器下设置"splitOn": "@triggerBody()['value']"
。 提醒您只能使用触发器进行设置。
这是结果。父级将获得四个实体值,子级逻辑将被拆分为四个并行的实体。
从下面的这张图片中,您可以发现每个分支仅获得一个值,然后在HTTP触发之后,您可以添加相同的操作。