如何将 SplitOn 与 singleInstance 一起使用?

How to use SplitOn with singleInstance?

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

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

最好的解决方案是什么,因为 "operationOptions": "singleInstance",

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

没有与 splitOn 一起工作。

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

编辑:

行是原子的,不需要排序。每行都可以独立于其他数据单独处理。

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

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

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

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

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

您不需要并发处理,您需要有序处理。目前,处理此问题的最直接方法是对集合进行 Foreach。虽然等待 ~3 周可能是更好的选择。

一个决定点是原子性是集合还是项目。另外,您需要知道重叠批次是否可以。

例如,如果您需要按顺序处理所有项目,并进行批处理级别验证,那么并发性 = 1 的 Foreach 就是您所需要的。