本主题介绍了配置 SOAtest 和 Virtualize (通过所选定的支持工具和提供操作工具) 以访问 IBM MQ 所要求的步骤。
本章包含:
本主题涉及在 IBM WebSphere MQ Java API 上测试服务,而不是在标准 JMS API 上测试服务。如果您打算使用功能 JMS API 发送和接收来自 IBM WebSphere MQ 的消息,请选择 JMS 传输选项并引用 JMS。
若要使用 MQ 选项,必须添加 WebSphere MQ 客户端或服务器安装中的 jar。MQ 客户端可以在 http://www-01.ibm.com/support/docview.wss?uid=swg24042176进行下载。
关于 WebSphere MQ 9,要求 jar:
com.ibm.mq.allclient.jar
关于 WebSphere MQ 8,要求 jar:
com.ibm.mq.allclient.jar
关于 WebSphere MQ 7,要求 jar:
com.ibm.mq.jar
com.ibm.mq.jmqi.jar
com.ibm.mq.headers.jar
com.ibm.mq.pcf.jar
com.ibm.mq.commonservices.jar
connector.jar
com.ibm.mq.jar
connector.jar
针对所有版本,这些 jar 文件可以在 [WebSphere MQ Installation directory]/java/lib
中找到。
若要向 SOAtest 或 Virtualize 类路径添加这些 jar 文件,请完成以下内容:
从合适工具的 Transport 选项卡内的 Transport 下拉菜单中选中 Websphere MQ 之后,左窗格将显示以下选项:
MQ 地址选项分为两类:Connection Settings 和 Authentication。
在指定 MQ 连接设置时,可以在以下模式之间进行选择:
如果正在使用默认模式,请完成以下字段:
选项 | 说明 |
---|---|
Host | 指定运行 IBM MQ 的主机名。 |
Port | 指定正在运行 IBM MQ 的端口(默认为 1414)。 |
Channel | 指定服务端定义的通道名。 |
Queue manager | 指定队列管理器的名称。 |
Put queue | 指定发送消息的队列。 |
Get queue | 指定从哪个队列检索消息。 |
如果正在使用 CCDT 模式,请完成以下字段...
选项 | 说明 |
---|---|
CCDT file | 指定 CCDT 文件(带有 .tab 扩展名)的位置。 |
Queue manager | 指定队列管理器的名称。 |
Put queue | 指定发送消息的队列。 |
Get queue | 指定从哪个队列检索消息。 |
选择 Perform Authentication 多选框,输入验证请求的 Username 和 Password 。如果未使用正确的用户名和密码,则不会对请求进行身份验证。
消息交换模式可以使用以下选项:
Expect Synchronous Response:指定是否让 SOAtest 或 Virtualize 接收响应。如果选择 Expect Synchronous Response,则 SOAtest 或者 Virtualize 将发送消息并接受响应。如果未选择 Expect Synchronous Response ,则 SOAtest 或者 Virtualize 将只会单方面地发送消息,而不会接收响应。
该部分允许配置 MQRFH2 数据头,它用于将消息传递给消息代理并从该消息代理中传递消息,这个消息代理属于 WebSphere Message Broker (如 http://www.ibm.com/support/knowledgecenter/SSKM8N_7.0.0/com.ibm.etools.mft.doc/aq06920_.htm上所述)。
在 MQRFH2 Header 区域,可以配置请求消息头的不同部分,然后 SOAtest 或 Virtualize 将根据指定的设置创建 "folders" 的数据头。
Publish/Subscribe Command:该面板允许配置 <psc> (Publish/subscribe command) 文件夹。<Psc> 文件夹用于向代理传输发布命令消息和订阅命令消息。NameValueData 字段中只允许一个 psc 文件夹。有关所有详细信息,请查阅 http://www.ibm.com/support/knowledgecenter/SSKM8N_7.0.0/com.ibm.etools.mft.doc/aq06950_.htm (Command messages) 。
有关 JMS 消息内容的更多信息,请查阅 http://www.ibm.com/support/knowledgecenter/SSKM8N_7.0.0/com.ibm.etools.mft.doc/ac24863_.htm 。
MQRFH2 Get Messages Options:该面板允许控制 Transform MQRFH2 Header to XML format for Get Messages 选项。如果启用该选项,响应消息的 MQRFH2 header 将被转换为可读的 XML 格式。它允许应用 XML 输出工具(如,XML 数据库、XML 转换器)。如果没有启用该选项,则响应消息的 MQRFH2 header 可能包含不可查看的字符。
Put Messages 具有以下可用选项:
MQQueue.put()
的操作。可以指定下列值中的任何值,或不指定任何值。MQOO_PASS_IDENTITY_CONTEXT:这允许在消息放入队列时,在 PutMsgOpts 参数中指定 MQPMO_PASS_IDENTITY_CONTEXT 选项。这将向消息提供使用 MQOO_SAVE_ALL_CONTEXT 选项打开的 input 队列中的识别上下文信息。必须指定 MQOO_OUTPUT 选项。
MQOO_SET_IDENTITY_CONTEXT:这允许在消息放入队列时在 PutMsgOpts 参数中指定 MQPMO_SET_IDENTITY_CONTEXT 选项。这将向消息提供在 MQPUT() 或 MQPUT1() 调用上指定的 MsgDesc 参数中包含的识别上下文信息。该选项意指 MQOO_PASS_IDENTITY_CONTEXT,因此它不需要指定。必须指定 MQOO_OUTPUT 选项。
MQMD.report:关于其他消息的报告信息。该字段启用 SOAtest & Virtualize 发送原始消息,以指定要求报告或响应哪些消息,是否在消息中包含应用程序消息数据,以及如何设置报告或答复中的消息和关联 ID。它包含 MQC 类中的一个或多个常量。
可以从以下每一项中选择一个类型:
MQRO_EXCEPTION_WITH_DATA:这与 MQRO_EXCEPTION 相同,只是来自原始消息的应用程序消息数据的前 100 个字节包含在报告消息中。如果原始消息包含一个或多个 MQ header 结构,则除了应用程序数据的 100 个字节外,它们也将包含在报告信息中。
MQRO_EXPIRATION_WITH_DATA:这与 MQRO_EXPIRATION 相同,只是来自原始信息的应用程序消息数据的前 100 个字节包含在报告信息中。如果原始消息包含一个或多个 MQ header 结构,则除了应用程序数据的 100 个字节外,它们也将包含在报告信息中。
MQRO_EXPIRATION_WITH_FULL_DATA:这与 MQRO_EXPIRATION 相同,只是所有来自原始消息的应用消息数据都包括在报告消息中。
Get Messages 可以使用以下选项:
MQGetMessageOptions.options:该选项控制 SOAtest & Virtualize 内部调用 MQQueue.get() 的操作。
可以指定下列值中的任何值,或不指定任何值。
MQGMO_WAIT:SOAtest 或 Virtualize 在合适的消息到达之前一直等待。最大等待时间在 WaitInterval 中指定。
MQGMO_NO_WAIT:如果没有合适的消息,则 SOAtest 或 Virtualize 不会等待。这与 MQGMO_WAIT 选项相反,并定义为辅助程序文档。
MQGMO_BROWSE_FIRST:当使用 MQOO_BROWSE 选项打开队列时,会在第一条消息之前在队列上建立并定位一个浏览游标。然后便可使用 MQGET 调用指定 MQGMO_BROWSE_FIRST, MQGMO_BROWSE_NEXT 或 MQGMO_BROWSE_MSG_UNDER_CURSOR 选项,以非破坏性地提取队列中的消息。该浏览游标在队列上的消息中标记定位,下一个使用 MQGMO_BROWSE_NEXT 的 MQGET 调用将从该位置搜索合适的消息。
MQGMO_BROWSE_NEXT:将浏览游标前进到队列上的下一条消息,该消息满足 MQGET 调用上指定的选择标准。该消息将返回到 SOAtest 或 Virtualize,但仍保留在队列上。为浏览器打开队列后,使用处理的第一个浏览调用与是否选定 MQGMO_BROWSE_FIRST or MQGMO_BROWSE_NEXT 选项具有相同的影响。
MQGMO_MSG_UNDER_CURSOR:不管 MQGMO 的 MatchOptions 字段中是否指定了 MQMO_* 选项,都可检索浏览游标指向的消息。该消息将从队列中删除。浏览游标指向的消息是最后使用 MQGMO_BROWSE_FIRST 或 MQGMO_BROWSE_NEXT 选项检索的消息。
MQGMO_UNLOCK:解锁消息。要解锁的消息之前必须通过 MQGMO_LOCK 选项的 MQGET 调用锁定。如果该句柄没有锁定任何消息,则调用将使用 MQRC_NO_MSG_LOCKED 来完成。
MQGMO_CONVERT:请求要转换的 SOAtest 或 Virtualize 数据。在数据复制到消息缓冲区之前,该转换符合 characterSet 和 MQMessage 的编码属性。
MQOO_BROWSE:打开要浏览消息的队列。打开该队列,以使用后续具有其中以下一项的 MQGET 调用:MQGMO_BROWSE_FIRST, MQGMO_BROWSE_NEXT 和 MQGMO_BROWSE_MSG_UNDER_CURSOR。即使当前对列为 MQOO_INPUT_EXCLUSIVE 打开,也允许这样做。带有 MQOO_BROWSE 选项的 MQOPEN 调用在第一消息之前在队列上建立并逻辑定位了一个浏览游标。
MQOO_ALTERNATE_USER_AUTHORITY:ObjDesc 参数中的 AlternateUserId 字段包含用于验证该 MQOPEN 调用的用户标识符。不管是否授权 SOAtest 或 Virtualize 正在运行的用户标识符可以执行此操作,只有在授权该 AlternateUserId 可以打开带指定访问选项的对象时,该调用才会成功。
Queue Manager Options 可以使用以下选项:
MQCNO_FASTPATH_BINDING:该选项使得 SOAtest 或 Virtualize 与本地队列管理器代理成为同一执行单元的一部分。这与正常的绑定方法相反,SOAtest 或 Virtualize 以及本地队列管理器代理在单独的执行单元中运行。
MQCNO_STANDARD_BINDING:该连接选项使得 SOAtest 或 Virtualize 以及本地队列管理器代理(管理队列操作的组件)在单独的执行单元中运行(总的说来,在单独的进程中)。此安排保持队列管理器的完整性,也就是说,它保护队列管理器不受错误程序的影响。
MQCNO_SHARED_BINDING:该连接选项使得 SOAtest 或 Virtualize 以及本地队列管理器代理(管理队列操作的组件)在单独的执行单元中运行(总的说来,在单独的进程中)。此安排保持队列管理器的完整性。也就是说,它保护队列管理器不受错误程序的影响。然而,一些资源也在 SOAtest 或 Virtualize 以及本地队列管理器代理之间共享。
MQCNO_ISOLATED_BINDING:该选项使得 SOAtest 或 Virtualize 以及本地队列管理器代理(管理队列操作的组件)在单独的执行单元中运行(总的说来,在单独的进程中)。此安排保持队列管理器的完整性,也就是说,它保护队列管理器不受错误程序的影响。SOAtest 或 Virtualize 进程和本地队列管理器代理彼此隔离,因为它们不共享资源。
MQ Queue Manager Properties可以使用以下选项:
MQC.CCSID_PROPERTY:配置客户端使用的 CCSID。在以绑定模式直接连接到 WebSphere MQ 时,不可使用该选项。
更改该值将影响您连接的队列管理器转换 WebSphere MQ 数据头中信息的方式。WebSphere MQ 数据头中的所有数据(除了 MQMessage.applicationIdData 和 MQMessage.putApplicationName 字段中的数据)都来自 ASCII 编码集的不可变量部分。
如果避免对这两个字段使用 ASCII 编码集的变量部分的字符,则 CCSID 将从 819 更改为任何其他 ASCII 编码集。如果将客户端 CCSID 更改为与您正连接的队列管理器相同的 CCSID 时,则将获得队列管理器上的性能优势,因为它不尝试翻译消息数据头。如果 CCSID 字段中没有提供任何值,则 SOAtest 或 Virtualize 将提供 1208(UTF-8)的默认值。
SSL 可以使用以下选项:
如果 MQ 通道不要求客户端对其自身进行身份验证,则不需要提供 Key Store 和 Key Store Password 。
一旦通过指定 CipherSuite 和运行工具尝试 SSL 连接,信任库、密匙库和密匙库密码都不可更改。 如果它们被更改了,则需要重新启动 SOAtest 或 Virtualize,这些更改才会生效。
如果使用密匙库,则将需要下载并安装长度不受限制的 Java 加密扩展。有关更多详情,请查阅 JCE 前提条件。
Scripting Hook 选项允许通过使用脚本语言(如 Jython、Java Groovy 和 JavaScript)自定义 MQ 属性。
如果需要使用脚本工具的更多详细信息,请参考教程的脚本(Scripting)章节。对于脚本 API 列表,选择 Parasoft> Help,然后查找标题为 "Parasoft SOAtest Extensibility API" (适用于 SOAtest) 或 "Parasoft Virtualize Extensibility API" (适用于 Virtualize)的书。
以下时脚本访问密匙:
例如,如果要将 put 消息的有效期更改为 999:
from com.ibm.mq import *
def changeExpiry(context):
putMessage = context.get("mqPutMessage")
putMessage.expiry = 999
一旦使用上述脚本运行完成,注意,Traffic 数据头中的 Expiry 字段将更改为 999.
注意: Add MQ Hook 选项卡中设置的任何选项都将覆盖并优先于其他选项卡中设置的任何选项。
当出现错误时,MQ 将返回一个错误原因码。SOAtest & Virtualize 错误消息报告这些相同的原因码,以便用户解释它们。 关于 MQ 原因码及其意义的列表,请参考 http://www.ibm.com/support/knowledgecenter/SSFKSJ_8.0.0/com.ibm.mq.tro.doc/q040710_.htm上的 IBM Knowledge Center。
以下是使用客户端工具(如,SOAP 客户端、REST 客户端、消息传递客户端,等等)发送和接收字符数据的最佳实践。
在发送字符数据(如 XML、CSV、固定长度或纯文本)时,格式类型必须设置为 MQFMT_STRING 常量的值,该常量即“MQSTR”。
对于 SOAP 客户端工具,用来编码请求的字符集是通过使用工具的 Misc tab> Outgoing Message Encoding 选项来指定的。
其他可用工具(如,REST 客户端、消息传递客户端)使用产品 Misc 首选项中配置的字符编码。
可以使用以下选项:
如果指定不同编码,则 MQ 消息的字符集将默认为 MQCCSI_Q_MGR,它意指“消息中的字符数据存在于队列管理器的字符集中”。
应该在客户端工具的 MQGetMessageOptions (在 Transport 选项卡中)中启用 MQGMO_CONVERT 框。
这将指示队列管理器将消息转化为客户端工具的字符集。如果信息的原始字符集不受客户端(IBM_037,IBM_437,等)支持,那么这一点非常重要。
用来执行转换的字符集配置与 put 消息的字符集相同(如上所述)。