在 BizTalk 服务项目中将消息从桥路由到目标

更新时间: 2015年8月

使用路由条件将消息从一个组件路由到另一个组件。

连接 BizTalk 服务项目各个组件的显著原因之一是,将消息从一个组件路由到另一个组件。不过,这样做需要满足另一个要求 - 可能需要根据你的业务逻辑(也可称为路由条件),将消息从一个源组件路由到多个目标组件。如果存在多个路由条件,你还需要设置这些路由条件的遵循顺序。最后,在将消息最终路由到目标之前,可能需要对消息执行某些操作(例如,向消息标头分配值、添加自定义标头,等等)。本主题将详细介绍这些方面的操作,还提供有关如何在 BizTalk 服务项目中实现这些目的的说明。

本主题运用示例方案说明这些步骤。假设必须使用 XML 单向桥接来处理采用以下格式的 XML 消息:

<PaymentHistory xmlns:ns0="http://Integration.PipelineChaining">
  <BaseData>
    <Amount>10.4</Amount> 
    <CurrencyCode>CurrencyCode_0</CurrencyCode> 
    <EntryDate>1999-05-31</EntryDate> 
    <EntryTime>13:20:00.000-05:00</EntryTime> 
    <PaymentMode>Mode_0</PaymentMode> 
    <StatusCode>StatusCode_0</StatusCode> 
    <PurposeCode>PurposeCode_0</PurposeCode> 
  </BaseData>
</PaymentHistory>

业务逻辑是这样的:如果支付模式为信用卡,则必须将消息路由到单向外部服务;如果模式为现金,则必须将消息路由到单向中继终结点;如果模式不是二者之一,则必须将消息路由到 Service Bus 队列。

这是一个相当直白的概念。你必须定义传入的消息经桥接处理后要路由到的目标。对于可将消息从 XML 单向桥接或 XML“请求-答复”桥接路由到哪个位置,需要注意几个问题。有关这些注意事项的详细信息,请参阅Constraints on Using an XML One-Way BridgeConstraints on Using an XML Request Reply Bridge

以下过程描述了如何连接某个消息流的两个组件。

  1. 创建 BizTalk 服务项目,如Visual Studio 项目入门中所述。

  2. 在 Azure 上创建丰富消息传递终结点中的各个主题所述,将组件添加到 BizTalk 服务项目。

  3. 选择“工具箱”“桥”类别下的“连接器”

  4. 将鼠标指针指向充当消息源的组件(将光标移到该组件上时,将出现红点标记)的右端。鼠标指针将发生变化,显示一个较小的“S”符号,表示此组件会添加消息源。在红点处单击并按住鼠标,将红点拖到目标组件的左端(此时,光标再次发生变化,显示表示目标的较小“T”符号),然后松开鼠标。两个组件现已连接。请注意,可以将一个源组件连接到多个目标组件。

    note备注
    对于当前的里程碑,消息流必须始终以 XML 单向桥接或 XML“请求-答复”桥接开始。然后,可以在遵守约束的前提下将消息路由到任何组件。Constraints on Using an XML One-Way BridgeConstraints on Using an XML Request Reply Bridge中列出了这些约束。

    根据示例方案,必须将 XML 单向桥接连接到一个单向外部服务、一个单向中继终结点和一个 Service Bus 队列。

除了连接两个组件以外,路由方面的另一个重要操作是根据业务逻辑,将消息从一个源组件路由到多个目标组件。

根据上述示例方案,路由条件必须基于 XML 消息中的 PaymentMode 元素指示的支付模式。若要在 BizTalk 服务项目中实现此业务逻辑,需要针对每个条件创建路由筛选器。以下过程描述了如何执行此操作。

note备注
在开始创建筛选器之前,请确保已创建所有三个连接器(如前一过程中所述)。另外,还必须在桥的扩展阶段中创建了一个属性(例如 PaymentMode),以提取 XML 消息中 PaymentMode 元素的值。

以下过程描述了如何在 BizTalk 服务项目中设置路由条件。

  1. 右键单击 XML 单向桥接与单向外部服务之间的路由连接器,然后单击“属性”。在“属性”窗格中,单击“筛选条件”属性旁边的省略号 (…) 按钮,以打开“路由筛选器配置”对话框。

  2. 在该对话框中,选择“筛选”选项,然后输入以下筛选器字符串:

    PaymentMode='credit_card'
    
    note备注
    必须对筛选器表达式使用标准的 SQL 92 语法。

    请注意,PaymentMode 是必须在扩展阶段中为提取操作输入的属性,如果符合此筛选条件(针对 XML 单向桥接与单向外部服务之间的连接器输入),则将消息发送到单向外部服务。

    单击“确定”保存更改并退出。

  3. 同样,对于 XML 单向桥接与单向中继终结点之间的连接器,请输入如下所示的筛选器字符串:

    PaymentMode='cash'
    
  4. 如果支付模式既不是现金也不是信用卡,则应该将消息路由到 Service Bus 队列。若要在消息流中实现此目的,必须针对 XML 单向桥接与 Service Bus 队列之间的连接器,打开“路由筛选器配置”对话框,然后选择“全部匹配”。这样便会指定,如果不匹配上述任何一个筛选条件,则遵循此筛选条件,并将消息路由到 Service Bus 队列。

在前一部分,我们已针对路由连接器设置了筛选器,以确保将正确的消息路由到消息流的正确组件。但是,路由的顺序同样也很重要。例如,根据前面所述的方案,如果 PaymentMode 设置为 credit_card 的消息被路由到设置了“全部匹配”的筛选条件,该消息将被路由到 Service Bus 队列而不是单向外部服务终结点。因此,根据业务逻辑,应该最后才遵循“全部匹配”条件。可以通过设置应用筛选条件时必须遵循的顺序来实现此目的。

  1. 右键单击 XML 桥接(XML 单向桥接或 XML“请求-答复”桥接)并选择“属性”。在“属性”窗格中,单击“路由顺序表”属性旁边的省略号 (…) 按钮。

  2. “路由顺序表”对话框中显示了应用路由筛选器时遵循的默认顺序。此默认顺序就是你创建路由连接器的顺序。若要重新排列路由筛选器的顺序,请选择一个路由筛选器,然后使用向上和向下箭头按钮正确地排列其顺序。必须针对所有路由筛选器重复此步骤,直到排成所需的正确路由顺序。

  3. 单击“确定”保存更改并退出。

在将消息发送到消息收件人之前,你可能想要添加一些自定义消息标头,或者向标准消息标头分配值。可以使用路由操作来实现此目的。有关详细信息,请参阅Route Action

为了继续演示前面使用的示例,假设必须使用自定义 SOAP 标头 (CustomerName) 和值将消息发送到单向外部服务。

  1. 右键单击桥与单向外部服务之间的路由连接器,然后单击“属性”。在“属性”窗格中,单击“路由操作”属性旁边的省略号 (…) 按钮,以打开“路由操作”对话框。

  2. 在“路由操作”对话框中,单击“添加”以打开“添加路由操作”对话框。在“添加路由操作”对话框中,执行以下操作:

     

    部分 字段名称 说明

    属性(从其读取)

    属性名称

    列出 XML“请求-答复”桥接的前两个扩展阶段中定义的所有属性。在此处选择属性时,可以指定必须将选定属性的值分配到传出消息的相关消息标头。

    表达式

    使用此选项可以提供一个表达式,该表达式的生成值将传递给传出消息的相关消息标头。还可以使用此选项来输入分配到消息标头的常数值。以下是一些示例表达式:

    • P1 + P2,其中,P1 和 P2 是已在前两个扩展阶段的任何一个阶段中定义的两个属性。

    • 'Fabrikam',这是一个字符串常数

      Important重要提示
      必须始终为单引号内的表达式输入值。

    Important重要提示
    可以选择“属性名称”选项或“表达式”选项。这些选项是互斥的。

    目标(向其写入)

    类型

    输入传出消息的消息类型,将为该消息的标头分配你前面输入的值。

    下拉列表中提供的值根据消息目标的不同而变化。

    • 如果要路由到外部服务或中继终结点(单向或双向),下拉列表中提供的值将是“SOAP”“HTTP”

    • 如果要路由到队列或主题,下拉列表中提供的值将是“SOAP”“Brokered”

    • 如果要路由到 FTP 目标,下拉列表中提供的值将是“FTP”

    • 如果要路由到 SFTP 目标,下拉列表中提供的值将是“SFTP”

    • 如果要路由到 Azure Blob,下拉列表中提供的值将是“Azure Blob”

    SOAP 标头命名空间(仅当“类型”设置为 SOAP 时)

    输入要向其分配值的自定义 SOAP 标头的命名空间。

    Important重要提示
    如果你从“标识符”下拉列表中选择标准标头,此字段将灰显。只需为自定义 SOAP 标头输入命名空间。

    如果“类型”设置为 HTTPBrokered,此字段也将灰显。

    标识符

    输入要向其分配值的消息标头属性的名称。

    也可以在此处输入自定义标头。对于 SOAP 消息类型,下拉列表将列出标准标识符。对于 HTTP 消息类型,由于存在大量标准标头,下拉列表不会列出任何标头。对于 SOAP 和 HTTP 消息类型,可以列出要将其值分配给其他属性的自定义标头。

    对于其他目标类型(例如 FTP、SFTP 和 Azure Blob),可以选择必须向其写入属性值的消息标头。

    以前面使用的示例来讲,必须将此字段设置为 CustomerName,因为这是必须包含在传出消息中的自定义标头名称。

  3. “添加路由操作”对话框中单击“确定”。现在,该对话框应如下所示:

    传送操作

    那么,该对话框描绘了什么?它表示桥接将使用属性 P1(已在前面某一个扩展阶段中定义)的值,并将该值分配到命名空间为 http://schemas.microsoft.com/integration/promotedpropertiesinfo 的自定义 SOAP 标头 CustomerName,然后将它发送到消息收件人。

    Important重要提示
    如果使用两个不同的属性(例如 P1 和 P2)针对同一个路由连接器创建两个指向同一目标的路由操作,则不会收到生成错误。最后一个路由操作覆盖前面定义的路由操作。在本示例中,将遵循属性 P2 的路由操作。

  4. 若要更新或删除某个路由操作,可以在对话框中选择该操作,然后分别单击“编辑”“删除”。在“路由操作”对话框中单击“确定”,然后单击“保存”以保存对桥接配置所做的更改。

另请参阅

显示: