我有一个逻辑应用程序,带有一个获取多行的sql触发器。 我需要拆分行,以便更好地了解我每行所做的操作。
现在我希望逻辑应用程序一次只能处理一行。
从那以后,最好的解决方案是什么?
"operationOptions": "singleInstance",
和
"runtimeConfiguration": {
"concurrency": {
"runs": 1
}
},
无法使用splitOn
。
我还在考虑调用另一个逻辑应用程序并让逻辑应用程序使用runtimeConfiguration,但听起来就像一个丑陋的解决方法。
修改
该行是原子的,不需要排序。每行可以单独处理,与其他数据无关。
正如我所知道的那样,我不会使用foreach,因为一行中的一次失败将导致逻辑应用程序失败。 如果还应尝试其他一个数据集(行),则应该很容易看到错误。
答案 0 :(得分:1)
今天(截至2018-03-06),拆分触发器不支持并发控制。
话虽如此,应该在接下来的2-3周内为所有触发类型(包括拆分触发器)启用并发控制。
在此期间,您可以删除触发器上的splitOn
属性并将其并发限制设置为1.这将为整个项目集合启动单次运行,但您可以使用foreach
在你的定义中循环以限制并发性。这里的缺点是触发器将一直等到整个运行完成(所有项目都被处理),因此吞吐量不是最佳的。
答案 1 :(得分:1)
是的,您看到了预期的行为。请记住,拆分发生在触发器中,而不是工作流程中。 BizTalk以同样的方式工作,除了它在那里更明显。
您不希望并发处理,您需要有序处理。现在,处理这个问题最直接的方法是通过Foreach'ing收集。虽然等待~3周可能是更好的选择。
一个决定点将是天气原子性是集合或项目。此外,您还需要知道重叠批次是否合适。
例如,如果您需要按顺序处理所有项目,使用批次级别验证,则需要具有并发性= 1的Foreach。