本主题介绍了配置 SOAtest 和 Virtualize (通过所选定的支持工具和提供操作工具) 以访问 IBM MQ 所要求的步骤。
本章包含:
本主题涉及在 IBM WebSphere MQ Java API 上测试服务,而不是在标准 JMS API 上测试服务。如果您打算使用功能 JMS API 发送和接收来自 IBM WebSphere MQ 的消息,请选择 JMS 传输选项并引用 JMS。
向类路径添加必要的 Jar 文件
若要使用 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
关于 WebSphere MQ 6 及更早版本,要求 jar:
com.ibm.mq.jar
connector.jar
针对所有版本,这些 jar 文件可以在 [WebSphere MQ Installation directory]/java/lib
中找到。
若要向 SOAtest 或 Virtualize 类路径添加这些 jar 文件,请完成以下内容:
- 选择 Parasoft> Preferences。
- 打开 Parasoft> System Properties 页面。
- 单击 Add JARS 按钮,选择并勾住需要添加的 JAR 文件(如上所述)。
配置 MQ 选项
从合适工具的 Transport 选项卡内的 Transport 下拉菜单中选中 Websphere MQ 之后,左窗格将显示以下选项:
MQ 地址
MQ 地址选项分为两类:Connection Settings 和 Authentication。
在指定 MQ 连接设置时,可以在以下模式之间进行选择:
- Default mode:允许手动输入连接细节(如,主机、端口、通道,等等)。
- CCDT mode:允许指定提供连接细节的客户端通道定义表(CCDT)文件。
如果正在使用默认模式,请完成以下字段:
选项 | 说明 |
---|---|
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 数据头
该部分允许配置 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" 的数据头。
- Message Content Descriptor:该面板允许配置 <mcd> (Message content descriptor) 文件夹。<Mcd> 文件夹包含说明 WebSphere MQ 消息中消息数据结构的元素。它们都是字符串,并且区分大小写。
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) 。
- Application (usr) Defined Properties:该面板允许配置 <usr> (Application [user] defined properties) 文件夹。<usr> 文件夹的内容模型具有以下特征。
- 任何不包含冒号的有效 XML 名都可以作为元素名使用。
- 只允许简单元素(不允许组)。
- 所有元素都采用默认的字符串类型。
- 所有元素都是可选的,但不应该在文件夹中多次出现。
- MQRFH2 实例可以包含多个 <usr> 文件夹。
- Java Messaging Service:该面板允许配置 <jms> (Java M文件夹。essaging Service) folder.<jms> 文件夹的内容模型包含以下 MQRFH2 JMS 字段:
- Dst - 表示 JMSDestination header 字段。
- Div - 表示 JMSDeliveryMode header 字段。
- Exp - 表示 JMSExpiration header 字段。
- Pri - 表示 JMSPriority header 字段。
- Tms - 表示 JMSTimestamp header 字段。
- Cid - 表示 JMSCorrelationID header 字段。
- Rto - 表示 JMSReplyTo header 字段。
有关 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 消息
Put Messages 具有以下可用选项:
- MQPutMessageOptions.options:控制
MQQueue.put()
的操作。可以指定下列值中的任何值,或不指定任何值。- MQPMO_SYNCPOINT:该请求是在正常工作单元协议内操作的。在该工作单元提交之前,该消息在工作单元之外是不可见的。如果工作单元被回退,则消息将被删除。
- MQPMO_NO_SYNCPOINT:该请求是在正常工作单元协议外操作的。该消息立即可用,并且无法通过回退工作单元来删除它。如果该选项或 MQPMO_SYNCPOINT 都未指定,则工作单元协议中 put 请求包含的内容将由环境确定,请查阅 MQPMO_SYNCPOINT。不要使用 MQPMO_SYNCPOINT 指定 MQPMO_NO_SYNCPOINT。
- MQPMO_NO_CONTEXT:Identity 和 orgin context 都设置为不指示上下文。它意指 MQMD 中的 context 字段被设置为:
- 对于 character 字段,设置为 blank
- 对于 byte 字段,设置为 null
- 对于 numeric 字段,设置为 zero
- MQPMO_SET_IDENTITY_CONTEXT:该消息将具有与其相关联的上下文信息。该应用程序指定 MQMD 结构中的 identity 上下文。队列管理器使用与 MQPMO_DEFAULT_CONTEXT 相同的方式生成 origin context 信息。
- MQPMO_SET_ALL_CONTEXT:该消息将具有与其相关联的上下文信息。该应用程序指定 MQMD 结构中的 identity 和 origin context。
- MQPMO_FAIL_IF_QUIESCING:如果队列管理器处于静止状态,则该选项会导致 MQPUT 或 MQPUT1 调用失败。
- MQPMO_NEW_MSG_ID:队列管理器使用新的消息标识符代替 MQMD 中的 MsgId 字段的内容。该消息标识符与消息一起发送,并在 MQPUT 或 MQPUT1 调用的输出上返回给应用程序。
- MQPMO_NEW_CORREL_ID:队列管理器使用新的关联标识符代替 MQMD 中的 CorrelId 字段的内容。该关联标识符与消息一起发送,并在 MQPUT 或 MQPUT1 调用的输出上返回给应用程序。
- MQPMO_LOGICAL_ORDER:该选项告诉队列管理器应用程序如何将消息放入逻辑消息的组和段中。它只能在 MQPUT 调用上指定;它在 MQPUT1 调用上无效。有关该选项的更多信息,请查阅 WebSphere MQ Application Programming Reference。
- MQPMO_ALTERNATE_USER_AUTHORITY:这指明了 MQPUT1 调用的 ObjDesc 参数中的 AlternateUserId 字段包含用户标识符,该标识符用来验证将消息放入队列的权限。无论是否授权正在运行应用程序的用户标识符执行此操作,只有在这个 AlternateUserId 被授权使用指定选项打开队列时,该调用才会成功。
- MQPMO_RESOLVE_LOCAL_Q:使用该选项,以便在 MQPMO 结构中使用消息所在本地队列的名称来填充 ResolvedQName,并使用承载本地队列的本地队列管理器的名称来填充 ResolvedQMgrName。
- Put Queue open options for MQQueue.access():
- MQOO_OUTPUT:打开要 put 消息的队列。打开该队列,以便使用后续的 MQPUT 调用。
MQOO_PASS_IDENTITY_CONTEXT:这允许在消息放入队列时,在 PutMsgOpts 参数中指定 MQPMO_PASS_IDENTITY_CONTEXT 选项。这将向消息提供使用 MQOO_SAVE_ALL_CONTEXT 选项打开的 input 队列中的识别上下文信息。必须指定 MQOO_OUTPUT 选项。
- MQOO_PASS_ALL_CONTEXT:这允许在消息放入队列时在 PutMsgOpts 参数中指定 MQPMO_PASS_ALL_CONTEXT。这将向消息提供使用 MQOO_SAVE_ALL_CONTEXT 选项打开的 input 队列中的识别和原始上下文信息。该选项意指 MQOO_PASS_IDENTITY_CONTEXT,因此它不需要指定。必须指定 MQOO_OUTPUT 选项。
- MQOO_SET_ALL_CONTEXT:这允许在消息放入队列时在 PutMsgOpts 参数中指定 MQPMO_SET_ALL_CONTEXT 选项。这将向消息提供在 MQPUT 或 MQPUT1() 调用上指定的 MsgDesc 参数中包含的识别和原始上下文信息。必须指定 MQOO_OUTPUT 选项。
MQOO_SET_IDENTITY_CONTEXT:这允许在消息放入队列时在 PutMsgOpts 参数中指定 MQPMO_SET_IDENTITY_CONTEXT 选项。这将向消息提供在 MQPUT() 或 MQPUT1() 调用上指定的 MsgDesc 参数中包含的识别上下文信息。该选项意指 MQOO_PASS_IDENTITY_CONTEXT,因此它不需要指定。必须指定 MQOO_OUTPUT 选项。
- MQOO_ALTERNATE_USER_AUTHORITY:ObjDesc 参数中的 AlternateUserId 字段包含用于验证该 MQOPEN 调用的用户标识符。无论是否授权应用程序正在运行的用户标识符执行此操作,只有在 AlternateUserId 被授权使用指定访问选项打开对象时,该调用才会成功。
- MQOO_FAIL_IF_QUIESCING:如果队列管理器处于静止状态,则 MQOPEN 调用会失败。此选项适用于所有类型的对象。
MQMD.report:关于其他消息的报告信息。该字段启用 SOAtest & Virtualize 发送原始消息,以指定要求报告或响应哪些消息,是否在消息中包含应用程序消息数据,以及如何设置报告或答复中的消息和关联 ID。它包含 MQC 类中的一个或多个常量。
可以从以下每一项中选择一个类型:
- Exception:
- MQRO_EXCEPTION:当消息发送给另一个队列管理器,并且该消息无法传递到指定的目标队列时,消息通道代理会生成该类型的报告。例如,目标队列或中间交换队列可能饱和,又或者是消息对于队列来说太大了。
MQRO_EXCEPTION_WITH_DATA:这与 MQRO_EXCEPTION 相同,只是来自原始消息的应用程序消息数据的前 100 个字节包含在报告消息中。如果原始消息包含一个或多个 MQ header 结构,则除了应用程序数据的 100 个字节外,它们也将包含在报告信息中。
- MQC.MQRO_EXCEPTION_WITH_FULL_DATA:需要完整数据的异常报告。这与 MQRO_EXCEPTION 相同,只是所有来自原始消息的应用程序消息数据都包含在报告消息中。
- Expiration:
- MQRO_EXPIRATION:如果因为过了有效期,消息在传递给应用程序之前就被弃用了,则队列管理器将生成该类型的报告。如果该选项未设置,则即使消息因过期时间而弃用,也不会生成这种报告消息。
MQRO_EXPIRATION_WITH_DATA:这与 MQRO_EXPIRATION 相同,只是来自原始信息的应用程序消息数据的前 100 个字节包含在报告信息中。如果原始消息包含一个或多个 MQ header 结构,则除了应用程序数据的 100 个字节外,它们也将包含在报告信息中。
MQRO_EXPIRATION_WITH_FULL_DATA:这与 MQRO_EXPIRATION 相同,只是所有来自原始消息的应用消息数据都包括在报告消息中。
- Confirm on arrival:
- MQRO_COA:在消息被放在目标队列上时,拥有目标队列的队列管理器才会生成该类型的报告。来自原始消息的消息数据不包含在报告消息中。如果消息被作为工作单元传入,并且目标队列便是本地队列,则只有提交工作单元后,才可提取队列管理器生成的 COA 报告消息。
- MQRO_COA_WITH_DATA:这与 MQRO_COA 相同,只是来自原始消息的应用程序消息数据的前 100 个字节包含在报告消息中。如果原始消息包含一个或多个 MQ header 结构,则除了应用程序数据的 100 个字节外,它们也将包含在报告信息中。
- MQRO_COA_WITH_FULL_DATA:这与 MQRO_COA 相同,只是所有来自原始消息的应用程序消息数据都包含在报告信息中。
- Confirm on delivery:
- MQRO_COD:当应用程序使用删除队列中消息的方式从目标队列中提取消息时,队列管理器会生成该类型的报告。来自原始消息的消息数据不包含在报告消息中。如果消息作为工作单元来提取,则会在同一个工作单元中生成报告消息。因此,在提交该工作单元之前,报告是不可用的。如果工作单元被取消,则则不发送报告。
- MQRO_COD_WITH_DATA:这与 MQRO_COD 相同,只是来自原始消息的应用程序消息数据的前 100 个字节包含在报告消息中。如果原始消息包含一个或多个 MQ header 结构,则除了应用程序数据的 100 个字节外,它们也将包含在报告信息中。
- MQRO_COD_WITH_FULL_DATA:这与 MQRO_COD 相同,只是所有来自原始消息的应用程序消息数据都包含在报告信息中。
- MQRO_NEW_MSG_ID:这是默认操作,它指明如果作为该消息的结果生成了报告和回复,则将为该报告或回复消息生成一个新的 MsgId。
- MQRO_PASS_MSG_ID:如果作为该消息的结果生成了报告或回复,则该消息的 MsgId 将复制到报告或回复消息的 MsgId。
- MQRO_COPY_MSG_ID_TO_CORREL_I:这是默认操作,它指明如果作为该消息的结果生成了报告和回复,则该消息的 MsgId 将复制到报告或回复消息的 CorrelId。
- MQRO_PASS_CORREL_ID:如果作为该消息的结果生成了报告或回复,则该消息的 CorrelId 将复制到报告或回复消息的 CorrelId。
- MQRO_DEAD_LETTER_Q:这是默认操作,在消息无法发送到目标队列时,将消息放在放在死信队列上。如果发送方请求异常报告消息,则生成异常报告消息。
- MQRO_DISCARD_MSG:这将丢弃无法发送到目标队列的消息。如果发送方请求异常报告消息,则生成异常报告消息。
- MQRO_PASS_DISCARD_AND_EXPIRY:如果在消息上设置该选项,则会因此生成报告或回复,报告的消息说明符继承:
- MQRO_DISCARD_MSG(如果该选项已设置)。
- 消息剩余的有效期(如果这不是一个过期报告)。如果这是一个过期报告,过期时间设置为 60 秒。
- Exception:
- Expiry:输入有效时间(以十分之一秒为单位)。它由发送消息的应用程序设置。经过消息有效期后,队列管理器便可丢弃它。如果消息指定了其中一个 MQC.MQRO_EXPIRATION 标记,则在消息被丢弃时将被生成一个报告。
- Correlation ID:输入要用于消息中 correlationID 字段的关联 ID。
- Message sequence number:输入组内逻辑消息的序列号。
- Reply queue manager name:输入可以向其发送回复或报告(响应)消息的队列管理器的名称:
- Reply queue name:输入可以向其发送回复的队列的名称。
- Put application name:输入发送消息的应用程序的名称。
- Originating application data:输入原始应用程序的数据。这可用于提供关于消息起源的额外信息。
- User ID:输入用户 ID。这是消息识别的一部分,并标识是哪个用户发起的。
Get Messages
Get Messages 可以使用以下选项:
MQGetMessageOptions.options:该选项控制 SOAtest & Virtualize 内部调用 MQQueue.get() 的操作。
可以指定下列值中的任何值,或不指定任何值。
MQGMO_WAIT:SOAtest 或 Virtualize 在合适的消息到达之前一直等待。最大等待时间在 WaitInterval 中指定。
MQGMO_NO_WAIT:如果没有合适的消息,则 SOAtest 或 Virtualize 不会等待。这与 MQGMO_WAIT 选项相反,并定义为辅助程序文档。
- MQGMO_SYNCPOINT:该请求是在正常工作单元协议内操作的。该消息被标记为不可被其他应用程序使用,但是只有在提交工作单元后,才能从队列中删除。如果工作单元被回退,则该消息将再次可用。
- MQGMO_NO_SYNCPOINT:该请求是在正常工作单元协议外操作的。将立即从队列中删除该消息(除非这是一个浏览请求)。无法通过回退工作单元让该消息再次可用。
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_BROWSE_MSG_UNDER_CURSOR:不管 MQGMO 的 MatchOptions 字段中是否指定了 MQMO_* 选项,都可无破坏性地检索浏览游标指向的消息。浏览游标指向的消息是最后使用 MQGMO_BROWSE_FIRST 或 MQGMO_BROWSE_NEXT 选项检索的消息。如果该队列自打开以来没有发出这两个调用,或者如果浏览游标下的消息被破坏性地检索到,则调用将失败。该调用不会更改浏览游标的位置。
MQGMO_MSG_UNDER_CURSOR:不管 MQGMO 的 MatchOptions 字段中是否指定了 MQMO_* 选项,都可检索浏览游标指向的消息。该消息将从队列中删除。浏览游标指向的消息是最后使用 MQGMO_BROWSE_FIRST 或 MQGMO_BROWSE_NEXT 选项检索的消息。
- MQGMO_LOCK:锁定浏览的消息,使该消息对队列打开的任何其他句柄都不可见。
MQGMO_UNLOCK:解锁消息。要解锁的消息之前必须通过 MQGMO_LOCK 选项的 MQGET 调用锁定。如果该句柄没有锁定任何消息,则调用将使用 MQRC_NO_MSG_LOCKED 来完成。
- MQGMO_ACCEPT_TRUNCATED_MSG:如果消息缓冲流不足以容纳完整消息,请允许 MQGET 调用在缓冲区中填充尽可能多的消息。
- MQGMO_FAIL_IF_QUIESCING:如果队列管理器处于静止状态,将会强制 MQGET 调用失败。在 z/OS 上,如果连接(用于 CICS 或 IMS 应用程序)处于静止状态,则该选项还强制 MQGET 调用。
MQGMO_CONVERT:请求要转换的 SOAtest 或 Virtualize 数据。在数据复制到消息缓冲区之前,该转换符合 characterSet 和 MQMessage 的编码属性。
- MQGetMessageOptions.matchOptions:确定检索哪个消息的选择标准。可以设置以下匹配选项:
- MQMO_MATCH_CORREL_ID:要检索的消息必须要有一个关联标识符,该标识符与 MQGET 调用的 MsgDesc 参数中的 CorrelId 字段的值匹配。此匹配是在可能应用的任何其他匹配之外进行的(如,消息标识符)。
- MQMO_MATCH_GROUP_ID:要检索的消息必须要有一个组标识符,该标识符与 MQGET 调用的 MsgDesc 参数中的 GruopId 字段的值匹配。此匹配是在可能应用的任何其他匹配之外进行的(如,关联标识符)。
- MQMO_MATCH_MSG_ID:要检索的消息必须要有一个消息标识符,该标识符与 MQGET 调用的 MsgDesc 参数中的 MsgId 字段的值匹配。此匹配是在可能应用的任何其他匹配之外进行的(如,关联标识符)。
- MQMO_MATCH_MSG_SEQ_NUMBER:要检索的消息必须要有一个消息序列号,该序列号与 MQGET 调用的 MsgDesc 参数中的 MsgSeqNumber 字段的值匹配。此匹配是在可能应用的任何其他匹配之外进行的(如,组标识符)。
- MQMO_NONE:不要在选择要返回的消息时使用匹配项。队列上的所有消息都可以检索。MQMO_NONE 辅助程序文档。如果不打算将该选项与任何其他 MQMO_* 选项一起使用,但因为其值为零,因此无法检测到这种使用。
- Get Queue open options for MQQueue.access():
MQOO_BROWSE:打开要浏览消息的队列。打开该队列,以使用后续具有其中以下一项的 MQGET 调用:MQGMO_BROWSE_FIRST, MQGMO_BROWSE_NEXT 和 MQGMO_BROWSE_MSG_UNDER_CURSOR。即使当前对列为 MQOO_INPUT_EXCLUSIVE 打开,也允许这样做。带有 MQOO_BROWSE 选项的 MQOPEN 调用在第一消息之前在队列上建立并逻辑定位了一个浏览游标。
- MQOO_INPUT_AS_Q_DEF:打开队列,使用定义的默认队列获取消息。将打开队列,以便与后续 MQGET 调用一起使用。根据 DefInputOpenOption 队列属性的值,访问类型可以是共享的,也可以是独占的。
- MQOO_INPUT_SHARED:打开队列,以获取具有共享访问权限的消息。将打开队列,以便与后续 MQGET 调用一起使用。如果通过这个或另一个带有 MQOO_INPUT_SHARED 的应用程序打开当前队列,则调用会成功。但是如果通过 MQOO_INPUT_EXCLUSIVE 打开当前队列,则调用会失败,原因代码为 MQRC_OBJECT_IN_USE。
- MQOO_INPUT_EXCLUSIVE:打开队列,以获取具有独占访问权限的消息。将打开队列,以便与后续 MQGET 调用一起使用。如果通过这个或另一个应用程序为任何类型的输入打开当前队列,则调用会失败,原因码为 MQRC_OBJECT_IN_USE。
MQOO_ALTERNATE_USER_AUTHORITY:ObjDesc 参数中的 AlternateUserId 字段包含用于验证该 MQOPEN 调用的用户标识符。不管是否授权 SOAtest 或 Virtualize 正在运行的用户标识符可以执行此操作,只有在授权该 AlternateUserId 可以打开带指定访问选项的对象时,该调用才会成功。
- MQOO_FAIL_IF_QUIESCING:如果队列管理器处于静止状态,则 MQOPEN 调用会失败。此选项适用于所有类型的对象。
- Wait Interval:输入 MQQueue.get() 调用等待合适消息到达的最大时间(以毫秒为单位)。它与 MQC.MQGMO_WAIT 结合使用。如果未选择 MQMO_WAIT,则该选项将不起作用。Value -1 等价于选择了 MQGMO_NO_WAIT。
队列管理器选项
Queue Manager Options 可以使用以下选项:
- MQQueueManager binding 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 队列管理器属性
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
SSL 可以使用以下选项:
- CipherSuite:指定要用于指定 MQ 通道上的 SSL 连接的密码套件(CipherSuite)。 若要根据 CipherSpec 选择密码套件,请查阅 MQ 文档的 SSL CipherSpec 和 CipherSuite 页面(Using Java> Appendix> SSL CipherSpecs and CipherSuites)。
- Trust Store: 指定要用于服务端 SSL(客户机对队列管理器的身份验证)的信任库。
- Key Store: 指定要用于客户端 SSL(队列管理器对客户机的身份验证)的密匙库。
- Key Store Password: 指定密匙库密码。
- Peer Name:(可选项)识别队列管理器提供的证书是否与 Peer Name 参数指定的标准相匹配。服务器证书将该参数与队列管理器提供的 DN(Distinguished Name)证书进行匹配。
如果 MQ 通道不要求客户端对其自身进行身份验证,则不需要提供 Key Store 和 Key Store Password 。
一旦通过指定 CipherSuite 和运行工具尝试 SSL 连接,信任库、密匙库和密匙库密码都不可更改。 如果它们被更改了,则需要重新启动 SOAtest 或 Virtualize,这些更改才会生效。
如果使用密匙库,则将需要下载并安装长度不受限制的 Java 加密扩展。有关更多详情,请查阅 JCE 前提条件。
Scripting Hook
Scripting Hook 选项允许通过使用脚本语言(如 Jython、Java Groovy 和 JavaScript)自定义 MQ 属性。
如果需要使用脚本工具的更多详细信息,请参考教程的脚本(Scripting)章节。对于脚本 API 列表,选择 Parasoft> Help,然后查找标题为 "Parasoft SOAtest Extensibility API" (适用于 SOAtest) 或 "Parasoft Virtualize Extensibility API" (适用于 Virtualize)的书。
以下时脚本访问密匙:
- QueueManager – mqManager
- GetQueue – mqGetQue
- PutQueue – mqPutQue
- PutMessage – mqPutMessage
- GetMessage – mqGetMessage
- PutMessageOptions – mqPutMessageOptions
- GetMessageOptions – mqGetMessageOptions
例如,如果要将 put 消息的有效期更改为 999:
from com.ibm.mq import *
def changeExpiry(context):
putMessage = context.get("mqPutMessage")
putMessage.expiry = 999
一旦使用上述脚本运行完成,注意,Traffic 数据头中的 Expiry 字段将更改为 999.
注意: Add MQ Hook 选项卡中设置的任何选项都将覆盖并优先于其他选项卡中设置的任何选项。
解释 WebSphere MQ 错误消息
当出现错误时,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 客户端、消息传递客户端,等等)发送和接收字符数据的最佳实践。
Put Messages
在发送字符数据(如 XML、CSV、固定长度或纯文本)时,格式类型必须设置为 MQFMT_STRING 常量的值,该常量即“MQSTR”。
对于 SOAP 客户端工具,用来编码请求的字符集是通过使用工具的 Misc tab> Outgoing Message Encoding 选项来指定的。
其他可用工具(如,REST 客户端、消息传递客户端)使用产品 Misc 首选项中配置的字符编码。
可以使用以下选项:
- IBM_037
- IBM_437
- ISO_8859_1
- US_ASCII
- UTF16
- UTF8。
如果指定不同编码,则 MQ 消息的字符集将默认为 MQCCSI_Q_MGR,它意指“消息中的字符数据存在于队列管理器的字符集中”。
Get Messages
应该在客户端工具的 MQGetMessageOptions (在 Transport 选项卡中)中启用 MQGMO_CONVERT 框。
这将指示队列管理器将消息转化为客户端工具的字符集。如果信息的原始字符集不受客户端(IBM_037,IBM_437,等)支持,那么这一点非常重要。
用来执行转换的字符集配置与 put 消息的字符集相同(如上所述)。