代码之家  ›  专栏  ›  技术社区  ›  onefox

如何在singleInstance中使用SplitOn?

  •  -1
  • onefox  · 技术社区  · 7 年前

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

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

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

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

    未使用 splitOn .

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

    编辑:

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

    就我所知,我不会为此使用foreach,因为一行中的多个故障将导致逻辑应用程序失败。 如果一个数据集(行)也应尝试另一个数据集(行),并且错误应易于看到。

    2 回复  |  直到 7 年前
        1
  •  1
  •   DTRT    7 年前

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

    您不需要并发处理,而是需要有序处理。目前,处理这一问题最直接的方法是对集合进行Foreach'ing。尽管等待3周可能是更好的选择。

    一个决策点将是原子性是集合还是项目。此外,您还需要知道重叠批次是否正常。

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

        2
  •  1
  •   Szymon Wylezol    7 年前

    今天(截至2018年3月6日),触发器上的拆分不支持并发控制。

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

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