如何在SingleInstance中使用SplitOn?

时间:2018-03-06 16:00:54

标签: azure azure-logic-apps

我有一个逻辑应用程序,带有一个获取多行的sql触发器。 我需要拆分行,以便更好地了解我每行所做的操作。

现在我希望逻辑应用程序一次只能处理一行。

从那以后,最好的解决方案是什么? "operationOptions": "singleInstance",

"runtimeConfiguration": {
    "concurrency": {
        "runs": 1
    }
},

无法使用splitOn

我还在考虑调用另一个逻辑应用程序并让逻辑应用程序使用runtimeConfiguration,但听起来就像一个丑陋的解决方法。

修改

该行是原子的,不需要排序。每行可以单独处理,与其他数据无关。

正如我所知道的那样,我不会使用foreach,因为一行中的一次失败将导致逻辑​​应用程序失败。 如果还应尝试其他一个数据集(行),则应该很容易看到错误。

2 个答案:

答案 0 :(得分:1)

今天(截至2018-03-06),拆分触发器不支持并发控制。

话虽如此,应该在接下来的2-3周内为所有触发类型(包括拆分触发器)启用并发控制。

在此期间,您可以删除触发器上的splitOn属性并将其并发限制设置为1.这将为整个项目集合启动单次运行,但您可以使用foreach在你的定义中循环以限制并发性。这里的缺点是触发器将一直等到整个运行完成(所有项目都被处理),因此吞吐量不是最佳的。

答案 1 :(得分:1)

是的,您看到了预期的行为。请记住,拆分发生在触发器中,而不是工作流程中。 BizTalk以同样的方式工作,除了它在那里更明显。

您不希望并发处理,您需要有序处理。现在,处理这个问题最直接的方法是通过Foreach'ing收集。虽然等待~3周可能是更好的选择。

一个决定点将是天气原子性是集合或项目。此外,您还需要知道重叠批次是否合适。

例如,如果您需要按顺序处理所有项目,使用批次级别验证,则需要具有并发性= 1的Foreach。