如何:使用业务规则策略选择路线
目标
本部分演示如何创建业务规则,这些规则可用于根据收到的消息的内容选择行程,以及如何在通用行程中配置行程选择器管道组件来调用这些规则。 本部分介绍根据客户所在的区域以不同方式路由消息的业务方案。
在本操作方法主题中,你将完成以下步骤:
客户全球银行西部和东部部门的模型行程。
创建将用于选择处理请求的行程的业务规则策略。
将“行程选择器”管道组件配置为使用业务规则策略来选择适当的行程。
必备条件
本操作方法主题中的过程需要完成 开发活动的先决条件。
开始之前
在执行本操作方法主题后面的步骤之前,请完成以下任务:
创建 GlobalBank West 测试消息。
创建 GlobalBank East 测试消息。
以下过程介绍了如何执行上述各项操作。
创建 GlobalBank West 测试消息
在 Windows 资源管理器中,浏览到 C:\HowTos。
创建 NAOrderDoc.xml 的副本,然后将副本命名为 West.xml。
在记事本中,打开 West.xml,然后将 customerName 元素的值更改为 GlobalBankWest。
将 West.xml 另存为 UTF-8,然后关闭记事本。
创建 GlobalBank East 测试消息
在 Windows 资源管理器中,浏览到 C:\HowTos。
创建 NAOrderDoc.xml 的副本,然后将副本命名为 East.xml。
在记事本中,打开 East.xml,然后将 customerName 元素的值更改为 GlobalBankEast。
将 East.xml 另存为 UTF-8,然后关闭记事本。
步骤
创建业务规则引擎 (BRE) 策略以使用自定义消息属性选择行程
单击任务栏上的“开始”,指向“所有程序”,指向“BizTalk Server”,然后单击“业务规则编辑器”。
在策略资源管理器中,右键单击“ 策略”,然后单击“ 添加新策略”。 将策略命名 为 ResolveItineraryBasedOnCustomer。
注意
本操作指南主题使用的业务规则策略和行程与 主题如何:拆分交换和使用不同行程将生成的消息路由到多个文件位置中创建的业务规则策略和行程相同。 如果已完成该部分,可以跳到本主题后面的过程“创建和配置 ESB on-ramp”。
为客户 GlobalBank West 添加选择规则
在 ResolveItineraryBasedOnCustomer 策略中,右键单击“ 版本 1.0 (未保存) ”,然后单击“ 添加新规则”。 将规则命名 为 SetGlobalBankWestItinerary。
在“事实资源管理器”中,单击“ XML 架构 ”选项卡,右键单击“ 架构”,然后单击“ 浏览”。
在“ 架构文件 ”对话框中,浏览到 C:\Projects\Microsoft.Practices.ESB\Source\Samples\DynamicResolution\Source\ESB。DynamicResolution.Schemas,选择“ NAOrderDoc.xsd”,然后单击“ 打开”。
注意
这是定义 NAOrderDoc.xml 消息的架构,用于创建用于测试的“西部”和“东部”消息。
在“事实资源管理器”中,单击“ NAOrderDoc.xsd”,在“属性”窗格中单击“ 文档类型 ”属性,然后键入 GlobalBank.ESB.DynamicResolution.Schemas.NAOrderDoc。
注意
这是架构的完全限定名称。
在“事实资源管理器”中,展开 “NAOrderDoc.xsd”,然后展开“ OrderDoc”。
在“规则”窗口中,右键单击“ 条件”,指向 “谓词”,然后单击“ 相等”。
从“事实资源管理器”中,将 customerName 元素拖到“条件”下的 argument1 节点。
单击 argument2 节点,然后键入 GlobalBankWest。
在“事实资源管理器”中,单击“词汇”选项卡。展开 ESB。行程词汇表,展开版本 1.1,然后将“设置行程名称”定义拖动到“操作”。
单击空<字符串>,然后键入 GlobalBankWestItinerary。
注意
在本操作指南主题的后面部分,你将创建此行程来处理来自 GlobalBank West 的消息。
为 Customer GlobalBank East 添加选择规则
在策略资源管理器中,右键单击 SetGlobalBankWestItinerary 规则,然后单击“ 复制”。
右键单击“ 版本 1.0 (未保存) ”,然后单击“ 粘贴”。
在“ 新建规则名称 ”对话框中,键入 SetGlobalBankEastItinerary,然后单击“ 确定”。
在策略资源管理器中,单击 SetGlobalBankEastItinerary 规则。
在 “条件 ”部分中,右键单击“ GlobalBankWest”,然后单击“ 重置参数”。
单击 argument2,然后键入 GlobalBankEast。
在 “操作” 部分中,右键单击“ GlobalBankWestItinerary”,然后单击“ 重置参数”。
单击 <空字符串> ,然后键入 GlobalBankEastItinerary。
注意
稍后在操作方法主题中,你将创建此行程来处理来自 GlobalBank East 的消息。
发布和部署策略
在策略资源管理器的 ResolveItineraryBasedOnCustomer 策略下,右键单击“ 版本 1.0 (未保存) ”,然后单击“ 发布”。
在策略资源管理器的 ResolveItineraryBasedOnCustomer 策略下,右键单击 “版本 1.0 - 已发布”,然后单击“ 部署”。
为 GlobalBank West 消息创建 ESB 行程域特定语言 (DSL) 模型
在 Visual Studio 中,打开 C:\HowTos\Patterns\Patterns.sln。
在“解决方案资源管理器”中,右键单击“行程库”项目,指向“添加”,然后单击“新建行程”。
在“ 添加新项 ”对话框的“模板”窗格中,单击“ 行程单”“Dsl”。
在“ 名称 ”框中,键入 GlobalBankWestItinerary,然后单击“ 添加”。
配置 GlobalBank West 行程的属性
在 Visual Studio 中,单击 GlobalBankWestItinerary.行程的设计图面。 在 GlobalBankWestItinerary 属性窗口中,配置以下属性:
在 “模型导出程序 ”下拉列表中,单击“ 数据库行程导出程序”。
单击“ 行程数据库 ”属性旁边的省略号按钮 (...) 。
在“连接属性”对话框中,选择承载行程存储库数据库的SQL Server,然后指定数据库的名称 (默认名称为 EsbItineraryDb) 。
在 “路线状态” 下拉列表中,单击“ 已部署”。
注意
此步骤使你能够将行程导出到中央存储库;接收消息时,可以从此存储库中选择并附加行程。 稍后将“行程选择器”管道组件配置为使用业务规则引擎解析程序 (BRI) 来评估入站消息,并从此存储库中选择适当的路线。
定义行程的结构
从工具箱中,将 On-Ramp 模型元素拖到设计图面。 在 OnRamp1 属性窗口中,配置以下属性:
单击 “名称” 属性,然后键入 ReceiveNAOrder。
在 “扩展程序 ”下拉列表中,单击“ On-Ramp ESB 服务扩展”。
在 BizTalk 应用程序 下拉列表中,单击“ Microsoft.Practices.ESB”。
在“接收端口”下拉列表中,单击“OnRamp.行程”。
从工具箱中,将 Off-Ramp 模型元素拖到设计图面,然后将其放置在 ReceiveNAOrder 模型元素的右侧。 在 OffRamp1 属性窗口中,配置以下属性:
单击 “名称” 属性,然后键入 SendNAOrder。
在 “扩展程序 ”下拉列表中,单击“ Off-Ramp ESB 服务扩展”。
在 BizTalk 应用程序 下拉列表中,单击“ GlobalBank.ESB”。
在 “发送端口 ”下拉列表中,单击“ DynamicResolutionOneWay”。
从工具箱中,将 行程服务 模型元素拖到设计图面,然后将其放置在 ReceiveNAOrder 模型元素和 SendNAOrder 模型元素之间。 在“行程服务1”属性窗口中,配置以下属性:
单击 “名称” 属性,然后键入 “RouteMessage”。
在 “行程服务扩展程序 ”下拉列表中,单击“行程外延 服务扩展”。
在 “Off-Ramp ”下拉列表中,展开“ SendNAOrder”,然后单击“ 发送处理程序”。
右键单击 RouteMessage 模型元素的 Resolver 集合,然后单击“添加新冲突解决程序”。 在 Resolver1 属性窗口中,配置以下属性:
单击 Name 属性,然后键入 StaticResolver。
在 “冲突解决程序实现” 下拉列表中,单击“ 静态冲突解决程序扩展”。
在 “传输名称” 下拉列表中,单击“ 文件”。
单击“ 传输位置” 属性,然后键入 C:\HowTos\Out\West%MessageID%.xml。
在“工具箱”中,单击“ 连接器”。 将连接从 ReceiveNAOrder 模型元素拖动到 RouteMessage 模型元素。
在“工具箱”中,单击“ 连接器”。 将连接从 RouteMessage 模型元素拖动到 SendNAOrder 模型元素。
将模型导出到行程数据库
在 Visual Studio 中,右键单击 GlobalBankWestItinerary 行程的设计图面,然后单击“ 导出模型”。
注意
行程已导出到行程数据库,现在可以由行程选择器组件使用。
保存所有项目项目。
为 GlobalBank East 消息创建 ESB 路线 DSL 模型
在 Visual Studio 中,打开 C:\HowTos\Patterns.sln。
在“解决方案资源管理器”中,右键单击“行程库”项目,指向“添加”,然后单击“新建行程”。
在 “添加新项 ”对话框的“模板”窗格中,单击“ 行程”“Dsl”。
在“ 名称 ”框中,键入 GlobalBankEastItinerary,然后单击“ 添加”。
配置 GlobalBank East 行程的属性
在 Visual Studio 中,单击 GlobalBankEastItinerary.itinerary 的设计图面。 在 GlobalBankEastItinerary 属性窗口中,配置以下属性:
在 “模型导出程序 ”下拉列表中,单击“ 数据库路线导出程序”。
单击“ 行程数据库 ”属性旁边的省略号按钮 (...) 。
在“连接属性”对话框中,选择承载路线存储库数据库的SQL Server,然后指定数据库的名称 (默认名称为 EsbItineraryDb) 。
在 “行程状态” 下拉列表中,单击“ 已部署”。
注意
此步骤使你能够将行程导出到中央存储库;接收消息时,可以从此存储库选择和附加路线。 稍后将配置路线选择器管道组件,以使用 BRI 解析程序评估入站消息,并从此存储库中选择适当的路线。
定义行程的结构
从“工具箱”中,将 On-Ramp 模型元素拖到设计图面。 在 OnRamp1 属性窗口中,配置以下属性:
单击 Name 属性,然后键入 ReceiveNAOrder。
在 “扩展程序 ”下拉列表中,单击“ On-Ramp ESB 服务扩展”。
在 “BizTalk 应用程序 ”下拉列表中,单击“ Microsoft.Practices.ESB”。
在 “接收端口 ”下拉列表中,单击“ OnRamp.行程”。
从“工具箱”中,将 Off-Ramp 模型元素拖到设计图面,然后将其置于 ReceiveNAOrder 模型元素的右侧。 在 OffRamp1 属性窗口中,配置以下属性:
单击 Name 属性,然后键入 SendNAOrder。
在 “扩展程序 ”下拉列表中,单击“ Off-Ramp ESB 服务扩展”。
在 “BizTalk 应用程序 ”下拉列表中,单击“ GlobalBank.ESB”。
在 “发送端口 ”下拉列表中,单击“ DynamicResolutionOneWay”。
从“工具箱”中,将 “路线服务 ”模型元素拖动到设计图面,然后将其放置在 ReceiveNAOrder 模型元素和 SendNAOrder 模型元素之间。 在“行程服务1”属性窗口中,配置以下属性:
单击 Name 属性,然后键入 RouteMessage。
在 “行程服务扩展程序 ”下拉列表中,单击“ 出发路线服务扩展”。
在 “Off-Ramp ”下拉列表中,展开“ SendNAOrder”,然后单击“ 发送处理程序”。
右键单击 RouteMessage 模型元素的 Resolver 集合,然后单击“添加新冲突解决程序”。 在 Resolver1 属性窗口中,配置以下属性:
单击 Name 属性,然后键入 StaticResolver。
在 “冲突解决程序实现” 下拉列表中,单击“ 静态冲突解决程序扩展”。
在 “传输名称” 下拉列表中,单击“ 文件”。
单击“ 传输位置” 属性,然后键入 C:\HowTos\Out\East%MessageID%.xml。
在“工具箱”中,单击“ 连接器”。 将连接从 ReceiveNAOrder 模型元素拖动到 RouteMessage 模型元素。
在“工具箱”中,单击“ 连接器”。 将连接从 RouteMessage 模型元素拖动到 SendNAOrder 模型元素。
将模型导出到行程数据库
在 Visual Studio 中,右键单击 GlobalBankEastItinerary 行程的设计图面,然后单击“ 导出模型”。
注意
行程已导出到行程数据库,现在可以由行程选择器组件使用。
保存所有项目项目。
创建和配置 ESB on-ramp
单击任务栏上的“开始”,依次指向“所有程序”、“BizTalk Server”,然后单击“BizTalk Server管理”。
在BizTalk Server管理控制台中,依次展开“BizTalk 组”、“应用程序”和“Microsoft.Practices.ESB”。
右键单击“ 接收位置”,指向 “新建”,然后单击“ 单向接收位置”。
在 “选择接收端口 ”对话框中,单击“ OnRamp.Itinerary”,然后单击“ 确定”。
在“ 接收位置属性 ”对话框的“ 名称 ”框中,键入 OnRamp.Itinerary.HowTo。
在 “类型 ”下拉列表中,单击“ 文件”,然后单击“ 配置”。
在“ 文件传输属性 ”对话框的“ 接收文件夹 ”框中,键入 C:\HowTos\DropFolder,然后单击“ 确定”。
配置路线选择器管道组件
在“ 接收位置属性 ”对话框的“ 接收管道 ”下拉列表中,单击“ 行程”“选择”ReceiveXml“,然后单击省略号按钮 (...) 。
使用 “ 配置管道 ” 对话框可以配置以下 路线选择器 组件属性:
单击“ ItineraryFactKey ”属性,然后键入 Resolver.Itinerary。
单击 ResolverConnectionString 属性,然后键入 BRI:\\policy=ResolveItineraryBasedOnCustomer;useMsg=true;recognizeMessageFormat=true;
单击“ 确定 ”关闭“ 配置管道 ”对话框。
单击“ 确定 ”关闭“ 接收位置属性 ”对话框。
在BizTalk Server管理控制台中,右键单击“OnRamp.Itinerary.HowTo 接收位置”,然后单击“启用”。
测试行程选择器和商业规则
在 Windows 资源管理器中,浏览到 C:\HowTos。
复制 (不会) 文件 East.xml 和 West.xml 移动到 DropFolder 文件夹。
浏览到 C:\HowTos\Out。验证 East%MessageID%.xml 和 West%MessageID%.xml 消息是否已写入目录。
注意
尽管除 customer 元素的值外完全相同,但根据路线选择器管道组件的分辨率使用不同的路线处理消息。
在BizTalk Server管理控制台中,右键单击“OnRamp.Itinerary.HowTo”接收位置,然后单击“禁用”。
禁用 OnRamp.Itinerary.HowTo 接收位置后,右键单击它,然后单击“ 删除”。 在 “确认删除接收位置 ”对话框中,单击“ 是”。
其他资源
有关详细信息,请参阅下列相关主题: