DynamicReceive 示例(BizTalk Server 示例)

DynamicReceive 示例演示如何在动态指定 MQSeries 队列的 URI 时从 MQSeries 队列接收BizTalk Server消息。

本示例的用途

此示例动态创建由 queueManager、queue 和服务器变量指定的 MQSeries 队列。 它启用动态接收方案,并根据MQMD_MsgId和MQMD_CorrelId消息属性中指定的筛选条件从动态指定的 MQSeries 队列获取BizTalk Server消息。

本示例的设计方式和原因

通过在业务流程中指定 MQSeries 队列的 URI 地址,MQSeries 适配器即可从该队列动态接收消息。 此功能可通过在业务流程中使用要求-响应发送端口来获得。

若要动态接收消息,请在业务流程的 “表达式” 形状中指定以下内容:

  1. 通过在BizTalk Server消息上设置以下属性来启用动态接收:MQSeries.DynamicReceive = 'Yes'

  2. 通过设置端口 URI 指定要从中获取消息的地址。 (可选)可以指定以下内容:

    • 使用消息上的 MQSeries.WaitInterval 属性指定获取消息之前的等待间隔。

    • 指定用于接收消息的匹配条件。 匹配条件选项为 “消息 ID”、“ CorrelationID”、“ GroupID”和 “MessageSequenceNumber”。 有关详细信息,请参阅“https://go.microsoft.com/fwlink/?LinkId=89396与BizTalk Server相关的属性”。

    使用这些属性创建消息后,将使用请求-响应发送端口将其发送到 MQSeries 队列。 端口指定适配器以使用指示的匹配选项从指定 URI 接收消息。 以下操作结果:

  • 如果满足获取消息的筛选条件,则会从队列中检索消息并发送回业务流程。

  • 如果未满足获取消息的筛选条件,则会返回虚拟响应。 这表示指定的选项未从队列返回任何消息。

    使用动态接收功能可提供额外的灵活性,因为不需要固定的接收位置。 在某些情况下,你可能直到运行时才知道 URI。 动态接收功能允许动态确定从何处获取消息。 这也意味着无需在业务流程中实现队列协定。 可以根据指定的匹配条件,使用 MQSeries 队列中的动态指定的 URI 来等待获取消息。

本示例所在的位置

<示例路径>\Samples\AdaptersUsage\MQSeriesAdapter\DynamicReceive

下表显示了本示例中的文件及其用途说明:

文件 说明
DynamicReceive.btproj,

DynamicReceive.sln
应用程序的项目和解决方案文件。
DynamicReceive e.odx 应用程序的 BizTalk 业务流程文件。
Setup.bat 批处理文件,用于创建密钥文件、编译项目并部署它。

如何使用本示例

指定对解决方案有意义的 Microsoft.XLANGs.BaseTypes.Address 。 更改 MQSeries.WaitInterval 以指定何时接收响应消息。 更新 (或添加) 匹配选项,或者删除它们(如果计划获取所有消息)。

生成并运行示例

创建示例

  1. 在 Microsoft Visual Studio 中创建新的业务流程项目。

  2. 通过将BizTalk Server消息上的 MQSeries.DynamicReceive 属性设置为 来'Yes'启用动态接收操作。

  3. 通过设置 端口 URI 指定要从中获取消息的地址。

  4. (可选)可以指定以下两个属性:

    1. 使用消息上的 MQSeries.WaitInterval 属性指定获取消息之前的等待间隔。

    2. 指定用于接收消息的匹配条件。 有关详细信息,请参阅“匹配选项”帮助。

  5. 更改业务流程中的以下变量,以指定从何处获取消息:

    • 队列queueManager服务器。 这些用于在 表达式 形状中生成 URI。
  6. 修改 表达式 形状以注释掉动态队列创建并根据需要匹配选项。

  7. 可以通过以下任一方式生成和部署项目:

    • 打开解决方案,右键单击解决方案资源管理器中的项目,然后单击 “属性” 以查看项目属性。 在“签名”选项卡上,单击“选择强名称密钥文件”下拉框中的“<新建...”>。 然后提供密钥文件名并部署。

    • 或者,运行创建密钥文件的 setup.bat 文件,生成项目并部署它。

运行示例

  1. 将业务流程绑定到 BizTalk 主机。

  2. 启用业务流程创建的文件接收端口。 将文件接收位置从 c:\temp\in 更改为正确的文件文件夹。

  3. 登记并启动已创建的两个发送端口。 一个端口是动态要求响应端口类型,另一个是文件发送端口且是用于发送消息的队列。 确保已将此设置为正确的位置。

  4. 若要启动该业务流程,请将一个文件放在输入文件夹中。 这会调用 MQSeries 适配器并调用指定服务器上的 MQSAgent2 COM+ 组件以获取消息。 接收到的消息将存储在文件发送端口中指定的文件夹位置。

  5. 如果未找到与 表达式 形状中指定的条件匹配的邮件,则会将虚拟邮件放入输出文件夹中。 若要禁用匹配选项,请注释掉 “表达式” 形状中的最后两行。

注释

  • 如果正在动态创建队列但未删除,则该队列将在下一个业务流程实例激活时引发错误。

  • 还可通过其他方法动态设置 URI,此示例只指定了一个选项。 例如,可在消息上下文中读取某些属性来设置 URI。

  • 如果队列中没有满足匹配选项的消息,则将返回一个虚拟消息。

  • 由于此示例使用动态发送端口,因此,可能需要指定诸如重试和事务等其他选项。 使用由适配器公开的上下文属性,可在将消息发送到动态要求-响应端口前设置这些选项。

  • 可以使用 MQSAdapterAdmin2 接口动态创建和删除 MQSeries 队列。 有关如何动态创建 MQSeries 队列的示例,请参阅 中的 https://go.microsoft.com/fwlink/?LinkId=89400“对队列管理的支持”。