此示例的这一部分演示了 ESB 如何将 JMS 标头元数据提升为消息上下文属性,Microsoft BizTalk 内业务流程中的代码和组件可以访问这些属性。 此示例包含一个接收管道,其中包含将 JMS 标头元数据提升为消息上下文属性的 ESB JMS 组件的实例。
接收端口将消息传递给一个名为 JMSRouter 的编排,该编排从消息的上下文属性中检索由 RfhUtil 实用工具分配的队列名称(并在标头元数据中发送)。 业务流程将此队列名称分配给动态发送端口,并将消息发送到该端口。
端口的发送管道包含 ESB JMS 组件的实例,该实例将消息上下文属性降级到 JMS 标头元数据中。
运行 Header 属性访问示例
如果 GlobalBank.ESB 应用程序尚未运行,请使用 BizTalk 管理控制台启动它。
运行 IBM RfhUtil 实用工具;在第一个下拉列表中选择名为 ESB.JMS.Sample.QueueManager 的队列管理器以连接到该队列管理器,如本示例第 1 部分所示。
在第二个下拉列表中,选择目标出站队列,名称为 ESB.JMS.SAMPLE.SENDTOBIZTALK。
单击 RfhUtil 实用工具中的 ReadFile 按钮,然后导航到名为 TEST-000128 的测试消息文件。JMS 位于名为 \Source\Samples\JMS\Test\Data\Load\ 的子文件夹中。 此文件包含一批 128 条测试消息,但实用工具仅加载第一个消息。
单击 RFH 选项卡,确保仅选中 JMS 复选框。
单击 jms 选项卡,然后确保所选 Reply To 队列为 ESB.JMS.SAMPLE.REPLY,所选 目标队列 为 ESB.JMS.SAMPLE.DYNAMICQ2。
单击“ 主 ”选项卡,然后单击“ 写入 Q ”按钮将消息写入队列。
应用程序执行后经历一段延迟,ESB 输出消息将出现在 ESB.JMS.SAMPLE.DYNAMICQ2 队列中。 打开 WebSphere 队列资源管理器并浏览队列以确认这一点。
示例的工作原理
在业务流程中,代码可以通过将消息加载到 XmlDocument 实例来访问 JMS 标头中的值,如以下代码所示。
if (null != InboundMsg(
Microsoft.Practices.ESB.JMS.Schemas.Property.MQRFH2_NameValueData))
{
jmsInfo.LoadXml(InboundMsg(
Microsoft.Practices.ESB.JMS.Schemas.Property.MQRFH2_NameValueData));
if (null != jmsInfo)
{
if (null != jmsInfo.SelectSingleNode("//Dst"))
{
xElement = jmsInfo.SelectSingleNode("//Dst");
destinationQueue = xElement.InnerText.ToUpper(
System.Globalization.CultureInfo.CurrentCulture);
}
if (null != jmsInfo.SelectSingleNode("//Rto"))
{
xElement = jmsInfo.SelectSingleNode("//Rto");
replyToQueue = xElement.InnerText.ToUpper(
System.Globalization.CultureInfo.CurrentCulture);
}
}
}
此外,代码可以访问消息的所有 MQMD 上下文属性。