业务规则框架体系结构
下图显示了业务规则框架的组件结构。
Microsoft 业务规则框架结构
以下段落对该框架的一些组件进行了说明。
Policy 类
Policy 对象是业务策略的单个实例,提供由基于规则的应用程序使用的接口。 它提供一个抽象概念,使应用程序开发人员不必关心规则存储的位置,即可从规则存储中提取规则集,实例化基础规则引擎的实例,以及确保将长期事实添加到引擎中。 在许多情况下,基于规则的应用程序使用 Policy 对象的并发实例。 这些并行实例可以表示同一策略、同一策略的不同版本或不同策略的不同版本。
RuleEngine 类
RuleEngine 对象充当业务策略的执行引擎。 它使用三个插件组件(转换器、推理引擎和跟踪侦听器)来实现业务策略。 RuleEngine 对象采用表示业务策略的 RuleSet 对象作为输入,并使用为规则集配置的翻译器、推理引擎和跟踪侦听器来实现规则集定义的业务策略。
事实检索器
事实检索器是一种用户定义的可选插件组件,负责收集供业务策略使用的长期事实。 有关详细信息,请参阅 如何创建事实检索器。
在执行之前, Policy 对象实例将其 RuleEngine 实例提供给事实检索器,使它有机会更新规则引擎的工作内存中的一组事实。 有关详细信息,请参阅 短期事实与 Long-Term 事实。
规则引擎更新服务
规则引擎更新服务可以在分布式环境中提供动态业务策略更新。 一个自动启动 Microsoft Windows NT 服务应用程序负责订阅在更改业务策略时发生的策略部署和取消部署事件 。
在典型的企业方案中,业务策略在更新、测试和版本控制之后进行部署。 部署包括将更新的策略添加到安全、持久化规则存储中,并可以选择对该存储执行逻辑,以便将与更新的策略有关的信息发布到所有有关方(请注意,是发布与策略有关的信息,而不是发布策略本身)。
在承载基于规则的应用程序的服务器上运行的规则引擎更新服务接收策略更新通知,并缓存信息以供后面使用。 通过将发布/订阅模型用于策略更新,您可以在不造成服务停机或中断的情况下以接近实时的方式更改业务策略。
策略/词汇创作工具
Microsoft BizTalk Server中的业务规则编辑器为最终用户和开发人员提供策略和词汇创作功能。
规则存储
规则存储是业务策略和词汇的存储库。 该存储库既可以是一个简单文件,也可以是安全、可伸缩、持久和可靠的数据库,例如 Microsoft SQL Server。 (SQL Server 用作该框架的默认规则存储)。
Caching
业务规则引擎框架为 RuleEngine 实例提供缓存机制。 每个 RuleEngine 实例都包含特定策略版本的内存中表示形式。
以下步骤描述通过 API 调用或执行调用规则形状 (实例化新 Policy 实例的过程) :
Policy 对象从规则引擎缓存请求 RuleEngine 实例。
如果缓存中存在策略版本的 RuleEngine 实例,则 RuleEngine 实例将返回到 Policy 对象。 如果 RuleEngine 实例不可用,缓存将创建一个新实例。 实例化 RuleEngine 实例时,如果为策略版本配置了一个事实检索器实例,则它会创建新的事实检索器实例。
对 Policy 对象调用 Execute 方法时,将执行以下步骤:
如果事实检索器存在,则 Policy 对象对事实检索器实例调用 UpdateFacts方法。 方法的事实检索器的实现可能会将长期事实断言到 RuleEngine 的工作内存中。
Policy 对象断言在 Execute 调用中传递的 Array 中包含的短期事实。
Policy 对象在 RuleEngine 上调用 Execute。
RuleEngine 完成执行并将控制权返回给 Policy对象。
Policy对象从 RuleEngine 收回短期事实。 事实检索器添加的长期事实将保留在规则引擎的工作内存中。
在 Policy 对象上调用 Dispose 方法后,RuleEngine 实例将释放回规则引擎缓存。
对于给定的策略版本(如果负载需要该版本),规则引擎缓存将具有多个规则引擎实例,并且每个规则引擎实例都具有自己的事实检索器实例。