如何:拆分交换并使用不同的路线将生成的消息路由至多个文件位置
目标
本部分演示如何创建使用 RouteySelectReceiveXml 管道的 ESB on-ramp,以及如何配置管道的组件以拆分入站交换,并根据消息上下文为每个生成的消息选择适当的路由名单。 将使用业务规则策略解决行程选择问题,并且将根据客户所在的区域以不同的方式路由消息。
在本操作方法主题中,你将完成以下步骤:
创建拆分 XML 交换的 ESB on-ramp。
配置路线选择器管道组件,以使用业务规则策略来选择适当的行程。
必备条件
本操作方法主题中的过程要求完成 开发活动的先决条件。
开始之前
在执行本操作指南主题后面的步骤之前,请完成以下任务:
创建所需的项目。
将架构项目添加到模式解决方案。
将项目添加到架构项目。
创建 BRE 策略以使用自定义邮件属性选择行程。
为客户 GlobalBank West 添加选择规则。
为客户 GlobalBank 东部添加选择规则。
发布和部署策略。
为 GlobalBank West 消息创建 ESB 路线域特定语言 (DSL) 模型。
配置 GlobalBank West 行程的属性。
定义 GlobalBank West 行程的结构。
将 GlobalBank West 模型导出到行程数据库。
为 GlobalBank East 消息创建 ESB 路线 DSL 模型。
配置 GlobalBank East 行程的属性。
定义 GlobalBank 东部行程的结构。
将 GlobalBank East 模型导出到行程数据库。
以下过程介绍了如何执行其中每个操作。
创建所需的项目
在 Windows 资源管理器中,浏览到 C:\HowTos。
创建名为 OrderDocEnvelope.xsd 的新文本文档。
在记事本中打开 OrderDocEnvelope.xsd 架构。
使用以下代码编辑文档。
<?xml version="1.0" ?> <xs:schema xmlns:ns0="http://globalbank.esb.dynamicresolution.com/northamericanservices/" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns="http://ESB.BizUnit.Map.Test" targetNamespace="http://ESB.BizUnit.Map.Test" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:import schemaLocation="GlobalBank.ESB.DynamicResolution.Schemas.NAOrderDoc" namespace="http://globalbank.esb.dynamicresolution.com/northamericanservices/" /> <xs:annotation> <xs:appinfo> <b:schemaInfo is_envelope="yes" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" /> <b:references> <b:reference targetNamespace="http://globalbank.esb.dynamicresolution.com/northamericanservices/" /> </b:references> </xs:appinfo> </xs:annotation> <xs:element name="OrderEnvelope"> <xs:annotation> <xs:appinfo> <b:recordInfo body_xpath="/*[local-name()='OrderEnvelope' and namespace-uri()='http://ESB.BizUnit.Map.Test']" /> </xs:appinfo> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element ref="ns0:OrderDoc" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
将 OrderDocEnvelope.xsd 另存为 UTF-8,然后关闭记事本。
在 C:\HowTos 文件夹中,创建名为 Batch.xml 的新文本文档。
在记事本中,打开 Batch.xml。
使用以下代码编辑文档。
<?xml version="1.0" ?> <ns0:OrderEnvelope xmlns:ns0="http://ESB.BizUnit.Map.Test"> <ns0:OrderDoc xmlns:ns0="http://globalbank.esb.dynamicresolution.com/northamericanservices/"> <ns0:customerName>GlobalBankWest</ns0:customerName> <ns0:ID>ns0:ID_0</ns0:ID> <ns0:requestType>10</ns0:requestType> </ns0:OrderDoc> <ns0:OrderDoc xmlns:ns0="http://globalbank.esb.dynamicresolution.com/northamericanservices/"> <ns0:customerName>GlobalBankEast</ns0:customerName> <ns0:ID>ns0:ID_0</ns0:ID> <ns0:requestType>11</ns0:requestType> </ns0:OrderDoc> <ns0:OrderDoc xmlns:ns0="http://globalbank.esb.dynamicresolution.com/northamericanservices/"> <ns0:customerName>GlobalBankEast</ns0:customerName> <ns0:ID>ns0:ID_0</ns0:ID> <ns0:requestType>12</ns0:requestType> </ns0:OrderDoc> </ns0:OrderEnvelope>
保存并关闭 Batch.xml。
将架构项目添加到模式解决方案
在 Visual Studio 中,打开 C:\HowTos\Patterns\Patterns.sln。
在“解决方案资源管理器”中,右键单击“解决方案”“模式”,指向“添加”,然后单击“新建项目”。
在“ 添加新项目 ”对话框的“项目类型”窗格中,单击“ BizTalk 项目”,然后执行以下操作:
在“模板”窗格中,单击“空BizTalk Server项目”。
在“ 名称 ”框中,键入 Patterns.Schemas,然后单击“ 确定”。
在解决方案资源管理器中,右键单击“Patterns.Schemas”,然后单击“属性”。
在属性窗口的“签名”选项卡上,选中“对程序集检查签名”框。
在 “选择强名称密钥文件 ”下拉列表中,单击“ <新建...”>。
在 “创建强名称密钥 ”对话框中,配置以下属性:
在 “密钥文件名 ”框中,键入“ 拆分”。
清除“使用密码检查保护密钥文件”框,然后单击“确定”。
在属性窗口的“部署”选项卡上的“应用程序名称”框中,键入 Microsoft.Practices.ESB。
关闭“属性”窗口。
将项目添加到架构项目
在“解决方案资源管理器”中,右键单击“Patterns.Schemas”,然后单击“添加引用”。
在“添加引用”对话框的“浏览”选项卡上,浏览到并选择“C:\Projects\Microsoft.Practices.ESB\Source\Samples\DynamicResolution\Source\ESB.DynamicResolution.Schemas\bin\Debug\GlobalBank.ESB.DynamicResolution.Schemas.dll”,然后单击“确定”。
在“解决方案资源管理器”中,右键单击“Patterns.Schemas”,指向“添加”,然后单击“现有项”。
在 “添加现有项 ”对话框中,浏览到并选择“C:\HowTos\OrderDocEnvelope.xsd”,然后单击“ 添加”。
保存所有解决方案项目。
在“解决方案资源管理器”中,右键单击“Patterns.Schemas”,然后单击“部署”。
注意
本操作指南主题使用的业务规则策略和行程与在 如何:使用 业务规则策略选择路线主题中创建的业务规则策略和行程相同。 如果尚未完成该部分,请完成以下附加步骤。 如果已完成该部分,请直接转到“步骤”部分。
若要创建业务规则引擎 (BRE) 策略,以使用自定义邮件属性选择行程
单击任务栏上的“开始”,指向“所有程序”,指向“BizTalk Server”,然后单击“业务规则编辑器”。
在策略资源管理器中,右键单击“ 策略”,然后单击“ 添加新策略”。 将策略命名为 ResolveItineraryBasedOnCustomer。
为 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 的消息。
为客户 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 解析程序评估入站消息,并从此存储库中选择适当的行程。
定义 GlobalBank West 行程的结构
从工具箱中,将 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 属性窗口中,配置以下属性:
单击 “名称” 属性,然后键入 StaticResolver。
在 “冲突解决程序实现 ”下拉列表中,单击“ 静态冲突解决程序扩展”。
在 “传输名称” 下拉列表中,单击“ 文件”。
单击“ 传输位置” 属性,然后键入 C:\HowTos\Out\West%MessageID%.xml。
在“工具箱”中,单击“ 连接器”。 将连接从 ReceiveNAOrder 模型元素拖到 RouteMessage 模型元素。
在“工具箱”中,单击“ 连接器”。 将 连接从 RouteMessage 模型元素拖到 SendNAOrder 模型元素。
将 GlobalBank West 模型导出到行程数据库
在 Visual Studio 中,右键单击 GlobalBankWestItinerary 行程的设计图面,然后单击“ 导出模型”。
注意
行程已导出到行程数据库,现在可以由行程选择器组件使用。
保存所有项目项目。
为 GlobalBank East 消息创建 ESB 行程 DSL 模型
在 Visual Studio 中,打开 C:\HowTos\Patterns.sln。
在“解决方案资源管理器”中,右键单击“行程库”项目,指向“添加”,然后单击“新建行程”。
在“ 添加新项 ”对话框的“模板”窗格中,单击“ 行程单”“Dsl”。
在“ 名称 ”框中,键入 GlobalBankEastItinerary,然后单击“ 添加”。
配置 GlobalBank East 行程的属性
在 Visual Studio 中,单击 GlobalBankEastItinerary.行程的设计图面。 在 GlobalBankEastItinerary 属性窗口中,配置以下属性:
在 “模型导出程序 ”下拉列表中,单击“ 数据库行程导出程序”。
单击“ 行程数据库 ”属性旁边的省略号按钮 (...) 。
在“连接属性”对话框中,选择承载行程存储库数据库的SQL Server,然后指定数据库的名称 (默认名称为 EsbItineraryDb) 。
在 “路线状态” 下拉列表中,单击“ 已部署”。
注意
此步骤使你能够将行程导出到中央存储库;收到消息时,可以从此存储库选择并附加行程。 稍后将配置“行程选择器”管道组件,以使用 BRI 解析程序评估入站消息,并从此存储库中选择适当的行程。
定义 GlobalBank 东部行程的结构
从工具箱中,将 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 属性窗口中,配置以下属性:
单击 “名称” 属性,然后键入 StaticResolver。
在 “冲突解决程序实现 ”下拉列表中,单击“ 静态冲突解决程序扩展”。
在 “传输名称” 下拉列表中,单击“ 文件”。
单击“ 传输位置” 属性,然后键入 C:\HowTos\Out\East%MessageID%.xml。
在“工具箱”中,单击“ 连接器”。 将连接从 ReceiveNAOrder 模型元素拖到 RouteMessage 模型元素。
在“工具箱”中,单击“ 连接器”。 将 连接从 RouteMessage 模型元素拖到 SendNAOrder 模型元素。
将 GlobalBank East 模型导出到行程数据库
在 Visual Studio 中,右键单击 GlobalBankEastItinerary 行程的设计图面,然后单击“ 导出模型”。
注意
行程已导出到行程数据库,现在可以由行程选择器组件使用。
保存所有项目项目。
步骤
创建和配置 ESB on-ramp
单击任务栏上的“开始”,指向“所有程序”,指向“BizTalk Server”,然后单击“BizTalk Server管理”。
在BizTalk Server管理控制台中,依次展开 BizTalk 组、应用程序、Microsoft.Practices.ESB。
右键单击“ 接收位置”,指向 “新建”,然后单击“ 单向接收位置”。
在 “选择接收端口 ”对话框中,单击“ OnRamp.Itinerary”,然后单击“ 确定”。
在“ 接收位置属性 ”对话框的“ 名称 ”框中,键入 OnRamp.Itinerary.HowTo。
在 “类型 ”下拉列表中,单击“ 文件”, 然后单击“ 配置”。
在“ 文件传输属性 ”对话框的“ 接收文件夹 ”框中,键入 C:\HowTos\DropFolder,然后单击“ 确定”。
配置路线选择器管道组件
在“接收位置属性”对话框中,单击“接收管道”下拉列表中的“行程”“SelectReceiveXml”,然后单击省略号按钮 (...) 。
使用 “ 配置管道 ” 对话框可以配置以下 路线选择器 组件属性:
单击“ ItineraryFactKey ”属性,然后键入 Resolver.Itinerary。
单击 ResolverConnectionString 属性,然后键入 BRI:\\policy=ResolveItineraryBasedOnCustomer;useMsg=true;recognizeMessageFormat=true;
单击“ 确定 ”关闭“ 配置管道 ”对话框。
注意
由于此接收位置正在反汇编 XML 交换,因此不需要 XML 反汇编程序组件配置。
单击“ 确定 ”关闭“ 接收位置属性 ”对话框。
在BizTalk Server管理控制台中,右键单击“OnRamp.Itinerary.HowTo 接收位置”,然后单击“启用”。
测试行程选择器和商业规则
在 Windows 资源管理器中,浏览到 C:\HowTos。
复制 (不会将) Batch.xml 移动到 DropFolder 文件夹。
浏览到 C:\HowTos\Out。验证是否已将一条 West%MessageID%.xml 消息和两条 East%MessageID%.xml 消息写入目录。
注意
尽管除了客户元素的值外,消息是相同的,但它们是根据路线选择器管道组件的分辨率使用不同的行程进行处理的。
在BizTalk Server管理控制台中,右键单击“OnRamp.Itinerary.HowTo”接收位置,然后单击“禁用”。
禁用 OnRamp.Itinerary.HowTo 接收位置后,右键单击它,然后单击“ 删除”。 在 “确认删除接收位置 ”对话框中,单击“ 是”。
其他资源
有关详细信息,请参阅下列相关主题: