使用 WebSphere Message Broker 的 WebSphere Transformation Extender 插件
2010-10-22 17:19:18 来源:WEB开发网简介
Integration Server 的 IBM® WebSphere® Transformation Extender(以下称为 WebSphere TX)通过在处理节点中嵌入 WebSphere TX 引擎扩展了 WebSphere Message Broker(以下称为 Message Broker)的转换消息能力。您可以使用 Message Broker Toolkit 中的 WebSphere TX 插件节点,轻松配置一个调用 WebSphere TX 映射的消息流来执行复杂的数据转换和验证任务,这样您就得到了一个数据转换和业务连通性的集成解决方案。以下是 WebSphere Message Broker 的 WebSphere Transformation Extender 插件的几点优势:
WebSphere TX 引擎向更广泛的消息格式和协议提供功能强大的转换和验证功能。
让您在广泛的行业标准(包括金融服务、医疗保健、保险、EDI 等等)中利用 WebSphere TX Industry Pack 提供的预定义数据格式。
给 Message Broker 用户一个用户友好的、无需编码的 WebSphere TX Type Designer 和 Map Designer 接口,使其可以较为容易地配置和可视化复杂数据类型和映射。
将格式转换复杂性与业务流逻辑分开,从而增强开发团队工作效率。让熟悉业务逻辑的成员可以将注意力集中在设计 Message Broker 消息流上,而数据格式专家可将注意力集中在 WebSphere TX 节点的格式映射上。
先决条件
要使用本文中的样例,您需要将以下产品安装在您的 Windows 机器上:
WebSphere MQ V7.0.1 或更高版本。
WebSphere Message Broker V7.0 或更高版本。
WebSphere Message Broker Toolkit V7.0 或更高版本。
WebSphere Transformation Extender Design Studio V8.3 或更高版本。
WebSphere Transformation Extender for Integration Servers V8.3 或更高版本。
创建一个 WebSphere TX 映射
本节将向您展示如何创建 WebSphere TX 类型树和映射,使 WebSphere TX Design Studio 可以将 CSV 输入数据转换成 XML 输出数据:
清单 1. CSV 输入数据样例
John Smith,222-2222,25 park st.,Heaven City,Univor State,222
清单 2. XML 输出数据样例
<?xml version="1.0"?>
<addressBook>
<name>John Smith</name>
<phone>222-2222</phone>
<address>
<street>25 park st.</street>
<city>Heaven City</city>
<state>Univor State</state>
<zip>222</zip>
</address>
</addressBook>
1. 通过导入函数为输出数据格式创建一个 XML 类型树
打开 Message Broker 工具箱,然后选择一个新目录作为您的工作空间。工具箱打开之后,从右上角切换至 Transformation Extender Development 透视图:
图 1. Transformation Extender Development 透视图
创建一个 WebSphere TX 项目:
从菜单栏选择 File => New => Project。
选择 Transformation Extender => Extender Project => Next。
在项目名称中输入 dwSample,然后单击 Finish。
通过导入 XSD 创建输出 XML 类型树:
在 Extender Navigator 中右键单击 Type Trees,然后选择 Import => XML Schema。
在弹出窗口中浏览并选择提供的 xsd 文件 AB.xsd,然后单击 Next。
保留所有的默认设置(western / Xerces / None),然后单击 Next。
图 2. XML Schema Importer 对话框
选择 dwSample 作为父文件夹,输入文件夹名 “AddressBook.mtt”,然后单击 Next。
Importer 开始验证架构,应该会显示零个警告或错误,并显示消息 “Type tree created successfully”。单击 Finish 完成 XML 架构导入。
在弹出的信息提示中,选择 Yes 打开类型树。
在菜单栏中,选择 Tree => Analyze => Structure and logic 来分析类型树。您将在 Analyze Results 视图中看到零个警告和错误,如果看到警告,忽略它们。
图 3. AddressBook 类型树分析结果
保存类型树。
2. 为 CSV 输入格式创建另一个类型树
在 Extender Navigator 视图中右键单击 Type trees 并选择 New => Type tree。然后选择 dwSample 作为父文件夹,输入文件名 addressCSV,然后单击 Finish:
图 4. 从 Extender Navigator 视图中选择类型树
向类型树添加条目:
在最新创建的 addressCSV 类型树上,右键单击 Root 并选择 Add => Yes。
在 Extender 属性面板中,在 Name 字段输入 “name”,在 Class 字段选择 Item,在 Item subclass 字段选择 Text,如下所示:
图 5. 姓名项属性配置
重复以上步骤,增加其余五个条目,电话、街道、城市、国家和邮政编码。所有这些属于 Item 类和 Text Item 子类。您的类型树看起来应该是这样的:
图 6. addressCSV 类型树
向类型树添加组:在类型树编辑面板上,右键单击 Root 并选择 Add => Yes。在 Extender 属性面板中,输入以下所示属性:
在 Name 字段输入 rec,在 Class 字段中选择 group。
在 Group subclass 字段之下的 Format 字段中选择 Explicit。
在 Component Syntax 字段中选择 Delimited。
在 Group subclass => Format => Component syntax 之下的 Value 字段中输入 “,”(逗号)。
图 7. rec 组属性配置
在 Type 树编辑面板中双击 rec,调出一个空的组件面板:
图 8. rec 组的空组件面板
将其余条目按下列顺序从类型树拖放到组件面板:姓名、电话、街道、城市、国家、邮政编码:
图 9. 将条目拖放到 rec 组的组件面板
保存组件面板。
在菜单栏,选择 Tree => Analyze => Structure and logic 来分析类型树,您在 Analyze 结果视图中应该看到零个警告和错误:
图 10. addressCSV 类型树分析结果
保存类型树。
3. 在输入类型树和输出类型树之间创建一个映射
在 Extender 导航器中右键单击 Map files 并选择 New => Map source。在弹出对话框中选择 dwSample 作为父文件夹,输入 addressMap 作为 File name,然后单击 Finish。
在 Outline 面板中右键单击 addressMap,然后在 Map 名称字段选择 New、input csv2xml 并单击 OK:
图 11. 创建一个新映射
右键单击 Input cards 并选择 New。在 New 输入卡对话框中,输入如下所示属性并单击 OK:
在 CardName 字段输入 “csv”。
在 TypeTree 字段选择 addressCSV.mtt。
在 Type 字段选择 rec。
在 FilePath 字段输入 “input.csv”。
图 12. Input Card 配置
右键单击 Output cards 并选择 New。在 New 输出卡对话框,输入如下所示属性并单击 OK:
在 CardName 字段输入 xml。
在 TypeTree 字段选择 AddressBook.mtt。
在 Type 字段选择 Doc。
在 FilePath 字段输入 output.xml.
图 13. Output Card 配置
在 Map Editing 面板上,执行以下操作:
将名称、电话、街道、城市、国家和邮政编码字段从输入卡拖放到输出卡相应的字段。
在输出卡上选择 version 字段,输入 ="1.0",然后按下 Enter (您必须按住 Enter 直止生效)。
在 encoding 字段和 standalone 字段输入 =NONE(全部大写)。
现在,您的映射看起来像这样:
图 14. 映射规则配置
保存映射。
在菜单栏选择 Map => Build 来建立映射。
直接将提供的文件 input.csv 放在项目工作空间下面。
在菜单栏选择 Map => Run 来运行映射。您可以看到成功完成映射的对话框:
图 15. 成功完成映射
验证 XML 输出结果:在菜单栏选择 Map => View run results。在弹出窗口中,查看 #1 XML:
图 16. 查看 XML 输出结果
文件内容应同上述清单 2 中的 XML 内容一样。
用 WebSphere TX 插件节点创建一个 Message Broker 流
既然您已经创建了 WebSphere TX 类型树和映射,接下来就要在 Message Broker 消息流中配置和执行 WebSphere TX 映射。您将配置一个流,从 MQ 输入队列中取出 CSV 格式消息,用 WebSphere TX 映射来将消息流转换为 XML,然后放在 MQ 输出队列中。
表格 1. MQ 和 Broker 配置概述
MQ 配置 | Queue Manager | MYMQ |
Input Queue | Q.IN | |
Output Queue | Q.OUT | |
Broker 配置 | Broker Name | MYBROKER |
1. 创建代理和输入/输出 MQ 队列
本节将向您展示如何使用命令创建 MQ 元素和代理。您也可以使用 Broker View Toolkit 创建代理。
打开 Windows Services 对话框:选择 Start => Run 并输入 services.msc。确保 IBM MQSeries 服务如开始所示。
图 17. 启动 IBM MQSeries 服务
打开 Message Broker 命令控制台:选择 Start => All Programs => WebSphere Message Broker V7。执行以下命令创建一个名为 MYBROKER 的代理。该命令也创建名一个为 MYQM 的队列管理器。执行命令之前确保用户名隶属于 msm 和 mqbrkrs。
清单3. 创建一个代理和相应的队列管理器的命令样例
mqsicreatebroker MYBROKER -i <username> -a <password> -q MYQM
mqsistart MYBROKER
在同一个 Message Broker 命令控制台,在 MYQM 队列管理器中使用以下命令创建命名为 Q.IN 和 Q.OUT 的非永久性输入和输出队列。
清单4. 创建 MQ 输入和输出队列的命令样例
runmqsc MYQM
def ql(Q.IN) MAXDEPTH(10000) DEFPSIST(NO)
def ql(Q.OUT) MAXDEPTH(10000) DEFPSIST(NO)
end
图 18. 创建 MQ 队列命令
2. 使用 Message Broker Toolkit 创建一个消息流
您需要创建一个使用 WebSphere TX 映射 csv2xml 的 Message Broker 消息流:
打开 Message Broker V7 Toolkit 并使用与创建 WebSphere TX 映射相同的工作空间。工具箱打开后,从右上端切换到 Broker Application Development 透视图,如前面 图 1 所示。
在菜单栏选择 File => New => Project,然后选择 Message Broker => Message flow project => Next。输入项目名称 dwFlow 并单击 Finish。
右键单击 dwFlow 项目并选择 New => Message Flow,输入消息流名称 my_wtx_flow 并单击 Finish。
在 my_wtx_flow 消息流编辑器画布中,从 WebSphere MQ 类别下的选项板中拖放一个 MQInput 节点。在 Basic 选项卡之下的 Node 属性部分输入 Q.IN 作为 Queue 名,并使其余字段保留默认设置。
从 WebSphere TX 类别之下的选项板拖放一个 WebSphere TX Map 节点到画布,并编辑 Node 属性,如下所示:
在 Basic 选项卡中选择 Use map from project 并单击 Browse 来选择 addressMap.mms之下的 csv2xml compiled map。在 Basic 选项卡中,您有两个选择来引用 WebSphere TX 映射。其中一个是 Use map from project,它引用一个已经包含在现有工作空间中的 WebSphere TX 已编译的映射。另一个是 Use external map,它通过使用 Map server location 字段指定的绝对路径引用 WebSphere TX 已编译的映射。在本例中选择 Use map from project 。
图19. WebSphere TX 插件节点基本配置
查看原图(大图)
如果您有不止一个输入卡,您可以在 Card number to wire 字段中指定想从 MQ 队列上获取消息的卡片数量。然而在本例中,您只有一个输入卡和一个输出卡,因次您可以让选项卡中的其余部分保留默认设置。
将 MQOutput 节点从 WebSphere MQ 类别下的选项板拖放到画布。在 Basic 选项卡之下的 Node 属性中,输入 Queue manager name 属性 MYQM ,输入 Queue name 属性 Q.OUT。在高级选项卡中,将 Message 内容从 Pass all 改变为 Default,将输出消息的消息头 PUTTIME 设置为消息发出时间。
图 20. MQOutput 节点高级配置
从选项板选择 connection 元素来连接三个节点。单击 MQInput node => Out,然后单击 WebSphere TX Map node 来在 MQInput 节点和 WebSphere TXMap 节点之间建立一个连接。然后选择 WebSphere TX Map => out1 并单击 MQOutput node 来在 WebSphere TXMap 节点和 MQOutput 节点之间建立第二个连接,一旦工作流部署到代理,MQInput 节点中的消息将被传递给 WebSphere TX Map 节点,ebSphere TX Map 节点的输出将输入 MQOutput 节点。
图21. Message Broker 流画布
保存流:按下 Ctrl + S。
构建用于部署到代理的 BAR 文件:
在左边的资源树中右键单击 dwFlow 项目并选择 New => Message Broker Archive,在 Name 字段输入 mybar。
在 Prepare 选项卡上,选择 my_wtx_flow.msgflow 并在底部单击 Build broker archive 来构建存档文件。您将在弹出对话框中看到操作成功完成。
图 22. 建立代理存档
查看原图(大图)
在 Manage 选型卡上,单击位于第一列的 my_wtx_flow.cmf。您可以修改 Additional instances 字段来管理由流创建的线程的数量。默认情况下,代理启动一个线程来处理每个流,但是如果您在 Additional instances 中输入的不是零,代理将启动超过一个线程来处理每个流,这在多核环境中可能会提高性能。
图 23. 代理存档配置
保存代理存档文件:按下 Ctrl + S。
3. 部署 BAR 文件到代理并启动消息流
在现有的 Message Broker V7 Toolkit 中,从 File 菜单选择 Window => Show view => Brokers。
在 Brokers 视图中,您能看见 MYBROKER,这是您在第一步中创建并附加到代理节点的:
图 24. 代理视图
右键单击 MYBROKER 并选择 New Execution Group。在弹出对话框中输入新的执行组名 EG1。单击 OK 之后,可能需要一段时间才能在 MYBROKER 下创建 EG1。
部署 BAR 文件:将 mybar.bar 拖放到 EG1:
图25. 部署 BAR 文件
my_wtx_flow 应该被部署在 MYBROKER 上运行。您能看到一个带有绿色向上箭头的流,这意味着该流是向上的且正在运行:
图 26. my_wtx_flow 成功启动
4. 验证流得到正确部署且正在运行
打开 MQ Explorer,展开 Queue managers 文件夹并选择 MYQM => Queues。
属于 MYQM 的所有队列都显示在右边面板中。右键单击 Q.IN 并选择 Put Test Message:
图27. 从 MQ Explorer 发出测试消息
清单 5. 消息内容样例
John Smith,222-2222,25 park st.,Heaven City,Univor State,222
图28. 输入测试消息内容
当流启动时,我们刚刚放进输入队列的消息由流来处理,转换成 XML,并放入到输出队列 Q.OUT。您可以在 MQ Explorer中查看:在右上角单击 Refresh,您将看到 Q.OUT 的当前队列深度变为 1,这意味着这个队列中只有一条消息:
图29. 从 MQ Explorer 验证输出消息
您可以验证消息内容:右键单击 Q.OUT 并选择 Browse messages。您应该能从 Message data 字段看到 XML 格式的消息内容。忽略 XML 内容中的方形符号 —— 它们代表换行符。
图30. 从 Message Browser 验证输出消息内容
查看原图(大图)
如果您看见如上所示的 XML 消息数据,意味着工作流已被部署且正在成功运行。
本文示例源代码或素材下载
更多精彩
赞助商链接