业务流程冻结和解除冻结

在同时运行大量长期业务流程时,内存和性能可能存在问题。 业务流程引擎通过“冻结”和“解除冻结”业务流程实例来解决这些问题。

冻结是将业务流程的状态序列化到 SQL Server 数据库中的过程。 解除冻结是此过程的相反过程:从数据库反序列化业务流程的上次运行状态。 冻结用于通过减少必须在内存中同时实例化的业务流程数来最大程度地降低系统资源的使用。

脱水

业务流程引擎可以确定某个业务流程实例已经空闲了相当长的一段时间。 它计算阈值以确定将等待各种操作发生的时长,如果超过这些阈值,它将冻结实例。 这可能发生在以下情况下:

  • 如果业务流程正在等待接收消息,并且等待的时间超过了引擎所确定的阈值。

  • 当业务流程“侦听”消息时(就像使用 侦听 形状时一样),并且不会在引擎确定的阈值之前触发任何分支。 唯一的例外是 “侦听 ”形状包含激活接收。

  • 当业务流程中的延迟超过引擎所确定的阈值时。

    引擎通过保存状态来解除实例的冻结,并释放实例所需的内存。 通过解除冻结休眠业务流程实例,引擎使大量长时间运行的业务流程能够在同一台计算机上并发运行。

    可以设置 12 个属性来配置BizTalk Server中脱水的工作原理。 本节中的主题列出并描述这些属性及其默认值,并讨论各种值如何影响冻结行为。

解除冻结

可以触发业务流程引擎,以便在消息接收后或在延迟形状中指定的超时到期后解除冻结某一业务流程实例。 然后,它将保存的业务流程实例加载到内存中,还原其状态,并从中断点运行它。 有关在业务流程中使用形状的详细信息,请参阅 业务流程形状

可以配置业务流程以便在多台服务器上运行。 在冻结某一业务流程实例后,可以在其中任何服务器上解除对该实例的冻结。 如果一台服务器出现故障,引擎将继续在不同的服务器上运行业务流程,继续运行以前的状态。 引擎还利用此功能跨服务器实现负载均衡。

后续步骤