【问题标题】:Create workflow service instances for large number of records at once一次为大量记录创建工作流服务实例
【发布时间】:2012-09-20 14:41:30
【问题描述】:

我正在处理一个业务问题,该问题必须导入包含 1000 条记录的文件。每条记录都必须在工作流中注册为单独的记录,该记录必须经过自己的工作流。

WF4 Corporate Purchase Process 示例有一个很好的解决方案,因为在第一步中它为所有必需的记录 ID 创建书签。因此,可以使用每个单独的记录/ID 的其余操作来恢复工作流。

  1. 我想知道如何使用工作流服务来实现相同的东西,因为我可以从 AppFabric 为我的工作流中获益。
  2. 是否有其他解决方案来处理批量记录/ID?否则,工作流服务必须被调用 1000 次才能注册工作流实例中的每条记录,这不是一个好的解决方案。

【问题讨论】:

    标签: workflow-foundation-4 appfabric batch-processing


    【解决方案1】:

    我想知道如何使用工作流服务来实现相同的东西,因为我可以从 AppFabric 为我的工作流中获益。

    这很简单。您将拥有一个读取文件并使用存在的循环活动循环结果的工作流。然后,在循环内,您将通过使用Send 活动调用端点来启动每条记录所需的工作流(“服务”)

    现在,对于作为服务的工作流,您将在工作流顶部有一个Receive 活动,该活动还具有CanCreateInstance 设置trueReceive 之后的所有内容与任何其他工作流程没有什么不同。您可以考虑在Receive 之后立即进行Send 活动,以便让调用者知道服务已启动。但这不是要求 - Receive 将是必需的,因为它强制 WF 构建工作流以使用 WorkflowServiceHost

    是否有任何其他解决方案来处理批量记录/ID?否则工作流服务必须被调用 1000 次才能注册工作流实例中的每条记录,这不是一个好的解决方案。

    您是否表示让 Web 服务器接收 1000 个请求不是一个好的解决方案?考虑一个 IIS 服务器可以处理大约 25-50 个请求的事实,每个瞬间每个核心。现在考虑这样一个事实,即您正在加载工作流的循环在那个瞬间时间内平均不会超过可能 5,但可能更像是 1 或 2。

    我认为 Web 服务器不会成为您的问题。我已经通过一个循环在服务器上启动了 10,000 个工作流,就像您将要构建的那样,它并没有出汗。

    【讨论】:

    • 感谢迈克的回答。我的业务问题在文件导入后开始。假设这个要求需要处理其他公司的发票。因此,我的解决方案必须为每张发票启动工作流程,该工作流程将根据发票原始所有者提供的流程完成自己的一组步骤。因此,我正在寻找文件导入后调用 WF 服务的选项。
    • @Koolb,相同的主体,只是外部工作流不会导入文件并从其他地方获取其列表。无论哪种方式,您都需要一个协调器来启动每个单独的工作流程。有意义吗?
    • 是的。我同意将 id 列表发送到外部工作流将是最好的解决方案。但是,我需要通过第二个工作流程为每个 id 创建书签。然后我可能不得不在循环中调用内部工作流的 Receive 方法来创建自动书签,但我可能可以选择 net.pipes 来提高性能。
    • @Koolb,我不明白你关于书签的问题。 Receive 活动创建一个书签并空闲的工作流。此外,Delay 活动也是如此。在构建工作流服务时,有许多不同的选项可以为以后的流添加书签和闲置。并且相关性不是问题,每个工作流非常简单与 id 相关,这很容易。
    【解决方案2】:

    一种方法是使用 WCF 的 MSMQ 绑定来启动您的工作流。请求可以通过 HTTP 正常进入,WCF 会将它们路由到 MSMQ 并处理负载。您可以通过 MSMQ 绑定 + IIS 设置限制使用多少工作流实例。

    下载描述使用 WCF 和 MSMQ 设置工作流应用程序的 Word 文档:http://www.microsoft.com/en-us/download/details.aspx?id=21245

    【讨论】:

    • 我没有考虑过排队。这应该是我的问题的一个很好的解决方案
    【解决方案3】:

    本着做最简单的事情的精神,您可以将子工作流作为一个活动引入主工作流,并为每个子工作流使用并行来为文件中的每个输入执行分支。不需要额外的调用,并且工具支持这一点,因为所有工作流都是活动。将主进程托管在服务中,这样您就可以避免与其他 IIS 用户(他们可能是真实的人)发生争用,这可能是一个好主意。

    我同意调用 IIS 或 WCF 服务 1000 次不是问题,除非您想在几秒钟内完成!

    重要的是要记住,工作流的优点之一是它的开销相当低(与其他工作流产品相比),因此您应该更关心工作流的作用,而不仅仅是启动大量实例的想法.像您的示例这样的批处理的想法非常普遍。

    【讨论】:

    • 感谢您的回答。作为业务问题的一部分,我的解决方案必须处理大量发票。发票所有者可能不同,每张发票都会按照其所有者给出的步骤进行。不管你澄清 wf 的低开销多么好。我可以根据它想出一个解决方案。
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-24
    • 2011-04-24
    • 2016-12-09
    相关资源
    最近更新 更多