本章节描述了如何设置SOAtest 和 Virtualize 以访问 IBM MQ。通过配置 Parasoft 工具可以实现对 IBM MQ 的访问。

内容包括:

IBM WebSphere MQ Java API 与标准 JMS API 相比

该部分涉及通过 IBM WebSphere MQ Java API 而非标准 JMS API 进行测试的服务。如果要使用 JMS API 发送和接收 IBM WebSphere MQ 的消息,请选择 JMS 传输选项,并参考 JMS

将必要的 jar 文件添加到类路径 

使用 MQ 选项,必须添加 WebSphere MQ 客户端或服务器安装的 jar 文件。MQ 客户端可以在 http://www.ibm.com/software/integration/wmq/clients/处进行下载。

针对 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中找到。

若要将这些 jar 文件添加到 SOAtest 或 Virtualize 的类路径下,请完成以下操作:

  1. 选择 Parasoft> Preferences
  2. 打开 Parasoft> System Properties 页面。
  3. 单击 Add JARS 按钮,选择并勾住需要添加的 JAR 文件(上述所列)。

Java 运行时

SOAtest 通过 SSL 连接到 WebSphere MQ 需要 IBM JRE。IBM Java 在以下网页可用:

https://www.ibm.com/developerworks/java/jdk/

SOAtest 附带 Java 的 Oracle 发行版,默认情况下使用此发行版。必须将 SOAtest 配置为使用 IBM JRE。有关更多详情,请查阅 配置 Java 运行时 。

配置 MQ 选项

从合适工具的 Transport 选项卡内的 Transport 下拉菜单选中 WebSphere MQ ,将在左窗格显示以下选项:

MQ 地址

指定 MQ 连接设置时,可以在以下模式中进行选择:

  • Default mode: 允许你手动输入连接细节(例如,主机、端口、通道等)。
  • CCDT mode: 允许指定提供连接详细信息的客户端通道定义表(CCDT)文件。
  • Bindings mode: 队列管理器和连接的应用程序在同一系统上运行时,请使用此模式。IBM WebSphere MQ Java API 直接连接到使用 Java Native Interface (JNI)的队列管理器。要使用绑定传输,JMS 的 IBM MQ 类必须在可以访问 IBM MQ Java Native Interface 库的环境中运行。

如果使用默认模式,请填写以下字段:

选项

说明

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指定接收消息的队列。

如果使用 Bindings 模式,请填写以下字段:

选项

说明

Queue manager指定队列管理器的名称。
Put queue指定发送消息的队列。
Get queue指定接收消息的队列。

身份验证

选择 Perform Authentication 复选框,输入 Username 和 Password 以对请求进行身份验证。如果未使用正确的用户名和密码,则不会对请求进行身份验证。

消息切换模式

Message Exchange Pattern有以下可用选项:

  • 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 将基于指定设置创建数据头“文件夹”。  

  • 消息内容描述符:此面板用于配置 <mcd> (消息内容描述符) 文件夹。<mcd> 文件夹包括描述 WebSphere MQ 中消息数据结构的元素。里面的元素都是字符串,并且区分大小写。
  • 发布/订阅命令:此面板用于配置 <psc> (发布/订阅命令) 文件夹。<psc> 文件夹用于将发布/订阅命令消息传达给代理。NameValueData 字段中只允许一个 psc 文件夹。有关完整信息,请查阅 http://www.ibm.com/support/knowledgecenter/SSKM8N_7.0.0/com.ibm.etools.mft.doc/aq06950_.htm (命令消息) 。

  • 应用程序(usr)定义的属性: 此面板用于配置 <usr> (应用程序(usr)定义的属性) 文件夹。<usr> 文件夹的内容模型具有以下特征。
    • 任何不包含冒号的有效 XML 名称都可以作为一个元素名称。
    • 仅允许使用简单元素(而不是组)。
    • 所有元素都采用默认类型的字符串。
    • 所有元素都是可选的,但在一个文件夹中不该出现多次。
    • 一个 MQRFH2 实例可以包含一个 <usr> 文件夹。
  • Java 消息传递服务: 此面板用于配置 <jms> (Java 消息传递服务) 文件夹。<jms> 文件夹的内容模型包含以下 MQRFH2 JMS 字段:
    • Dst - 表示 JMSDestination 数据头字段。
    • Div - 表示 JMSDeliveryMode 数据头字段。
    • Exp - 表示 JMSExpiration 数据头字段。
    • Pri - 表示 JMSPriority 数据头字段。
    • Tms - 表示 JMSTimestamp 数据头字段。
    • Cid - 表示 JMSCorrelationID 数据头字段。
    • Rto - 表示 JMSReplyTo 数据头字段。

      关于 JMS 消息的更多信息,请查阅 http://www.ibm.com/support/knowledgecenter/SSKM8N_7.0.0/com.ibm.etools.mft.doc/ac24863_.htm 。

  • MQRFH2 Get Messages 选项: 此面板用于控制 Transform MQRFH2 Header to XML format for Get Messages 选项。如果启用此选项,响应信息的 MQRFH2 数据头将转换为可读的 XML 格式。这使您可以应用 XML 输出工具(例如 XML 数据库、XML 转换程序)。如果没有启用此选项,响应信息的 MQRFH2 数据头可能包含不可见的字符。

输入通讯报文

Put Messages具有以下选项:

  • MQPutMessageOptions.options: 控制 MQQueue.put()的行为。可以指定以下任一值或不指定任何值。
    • MQPMO_SYNCPOINT: 该请求是在正常的工作单元协议内进行的。在提交工作单元之前,该消息在工作单元外部不可见。如果撤消工作单元,则会删除该消息。
    • MQPMO_NO_SYNCPOINT: 该请求是在正常的工作单元协议外进行的。该消息立即可用,不能通过撤消工作单元来删除。如果既没有指定该选项也没有指定 MQPMO_SYNCPOINT ,则工作单元协议中除 put 之外的请求都将由环境决定。请查阅 MQPMO_SYNCPOINT。不要将 MQPMO_NO_SYNCPOINT 指定为 MQPMO_SYNCPOINT。
    • MQPMO_NO_CONTEXT: 身份和来源上下文均设置为不指示上下文。这表示将 MQMD 中的上下文字段设置为:
      • Blank(针对字符字段)
      • Null(针对字节字段)
      • Zero(针对数值字段)
    • MQPMO_SET_IDENTITY_CONTEXT: 此消息将具有关联的上下文信息。该应用程序在 MQMD 结构中指定身份上下文。队列管理器以与 MQPMO_DEFAULT_CONTEXT 相同的方式生成来源上下文信息。
    • MQPMO_SET_ALL_CONTEXT: 此消息将具有关联的上下文信息。该应用程序在 MQMD 结构中指定身份和来源上下文。
    • MQPMO_FAIL_IF_QUIESCING: 如果队列管理器处于静止状态,则此选项强制 MQPUT 或 MQPUT1 调用失败。
    • MQPMO_NEW_MSG_ID: 队列管理器使用新的消息识别符代替 MQMD 中 MsgId 字段的内容。此消息识别符与消息一起发送,并在 MQPUT 或 MQPUT1 调用的输出上返回给应用程序。
    • MQPMO_NEW_CORREL_ID: 队列管理器使用新的关联识别符代替 MQMD 中 CooreIId 字段的内容。此关联识别符与消息一起发送,并在 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: 打开发送消息的队列。此打开队列与随后的 MQPUT 调用一起使用。
    • MQOO_PASS_IDENTITY_CONTEXT: 当消息放入队列时,允许在 PutMsgOpts 参数中指定 MQPMO_PASS_IDENTITY_CONTEXT 选项。这为消息提供了使用 MQOO_SAVE_ALL_CONTEXT 选项打开的输入队列中的身份上下文信息。必须指定 MQOO_OUTPUT 选项。

    • MQOO_PASS_ALL_CONTEXT: 当消息放入队列时,允许在 PutMsgOpts 参数中指定 MQPMO_PASS_ALL_CONTEXT 选项。这为消息提供了使用 MQOO_SAVE_ALL_CONTEXT 选项打开的输入队列中的身份和来源上下文信息。此选项意味着 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 数据头结构,则除了应用程序数据的 100 字节,它们还包含在报告消息中。

      • MQC.MQRO_EXCEPTION_WITH_FULL_DATA: 要求完整数据的异常报告。这与 MQRO_EXCEPTION 相同,不同之处在于报告消息中包含来自原始消息的所有应用程序数据。
    • Expiration:
      • MQRO_EXPIRATION: 如果因为消息超过了有效期,在它传递到应用程序之前已经被摒弃,则队列管理器将生成这种类型的报告。如果未设置此选项,消息因为此原因而被摒弃则将不会生成报告信息。
      • MQRO_EXPIRATION_WITH_DATA: 这与 MQRO_EXCEPTION 相同,不同之处在于报告消息中包含来自原始消息的应用程序消息数据的前 100 个字节。如果原始消息包含一个或多个 MQ 数据头结构,则除了应用程序数据的 100 字节,它们还包含在报告消息中。

      • MQRO_EXPIRATION_WITH_FULL_DATA: 这与 MQRO_EXCEPTION 相同,不同之处在于报告消息中包含来自原始消息的所有应用程序数据。

    • Confirm on arrival:
      • MQRO_COA: 将消息放置在目标队列时,拥有该目标队列的队列管理器将生成这种类型的报告。报告消息中将不包括原始信息的消息数据。如果消息作为工作单元的一部分放置,并且目标队列是一个本地队列,则仅当提交工作单元时,才能检索由队列管理器生成的 COA 报告消息。
      • MQRO_COA_WITH_DATA: 这与 MQRO_COA 相同,不同之处在于报告消息中包含来自原始消息的应用程序消息数据的前 100 个字节。如果原始消息包含一个或多个 MQ 数据头结构,则除了应用程序数据的 100 字节,它们还包含在报告消息中。
      • MQRO_COA_WITH_FULL_DATA: 这与 MQRO_COA 相同,不同之处在于报告消息中包含来自原始消息的所有应用程序数据。
    • Confirm on delivery:
      • MQRO_COD: 当应用程序以从队列中删除消息的方式从目标队列中检索消息时,队列管理器将生成这种类型的报告。报告消息中将不包括原始信息的消息数据。如果将消息作为工作单元的一部分进行检索,则报告消息是在同一工作单元内生成的,因此直到提交工作单元后,报告才可用。如果撤消工作单元,则不会发送报告。
      • MQRO_COD_WITH_DATA: 这与 MQRO_COD 相同,不同之处在于报告消息中包含来自原始消息的应用程序消息数据的前 100 个字节。如果原始消息包含一个或多个 MQ 数据头结构,则除了应用程序数据的 100 字节,它们还包含在报告消息中。
      • MQRO_COD_WITH_FULL_DATA: 这与 MQRO_COD 相同,不同之处在于报告消息中包含来自原始消息的所有应用程序数据。
    可以指定如何为报告或应答消息生成消息 ID:
    • MQRO_NEW_MSG_ID: 这是默认操作,它指示如果由于此消息而生成报告或应答,则将为报告或应答消息生成新的 MsgId。
    • MQRO_PASS_MSG_ID: 如果因此消息生成报告或应答,则该消息的 MsgId 将被复制到报告或应答消息的 MsgId。
    可以指定其中一项以下选项来控制如何设置报告或应答消息的关联性 ID:
    • MQRO_COPY_MSG_ID_TO_CORREL_ID: 这是默认操作,它指示如果因此消息生成报告或应答,则该消息的 MsgId 将被复制到报告或应答消息的 CorrelId。
    • MQRO_PASS_CORREL_ID: 如果因此消息生成报告或应答,则该消息的 CorrelId 将被复制到报告或应答消息的 CorrelId。
    可以指定其中一项以下选项来控制当原始消息无法传递到目标队列时,控制其处理:
    • MQRO_DEAD_LETTER_Q: 这是默认操作,如果消息无法发送到目标队列,则将其放置在死信(未传递消息)队列上。如果发件人请求发出异常报告消息,则会生成一条异常报告消息。
    • MQRO_DISCARD_MSG: 如果无法将其传递到目标队列,则将其丢弃。如果发件人请求发出异常报告消息,则会生成一条异常报告消息。
    • MQRO_PASS_DISCARD_AND_EXPIRY: 如果在消息上设置了此选项,并因此生成了报告或应答,则报告的消息描述符将继承:
      • 如果设置了 MQRO_DISCARD_MSG。
      • 消息的剩余有效时间(如果这不是有效时间报告)。如果这是有效时间报告,则将有效时间设置为 60 秒。
  • Expiry: 输入有效时间(0.1 秒之内)。它由放置消息的应用程序来设置。消息过了有效时间之后,队列管理器将丢弃它。如果消息指定了其中一个 MQC.MQRO_EXPIRATION 标记,则当消息被丢弃时将生成一个报告。
  • Correlation ID: 在消息的 correlation ID 字段中输入关联 ID。
  • Message sequence number: 输入组内逻辑消息的序列号。
  • Reply queue manager name: 输入可以向其发送应答或报告(响应)消息的队列管理器的名称。
  • Reply queue name: 输入可以向其发送应答的队列的名称。
  • Put application name: 输入放置消息的应用程序的名称。
  • Originating application data: 输入原始应用程序的数据。这可用于提供有关消息来源的其他信息。
  • User ID: 输入用户 ID。这是消息验证的一部分,它标识发起该消息的用户。

获取通讯报文

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 还是 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 数据。在将数据复制到消息缓冲区之前,该转换遵循 MQMessage 的 characterSet 和 encoding 属性。

  • MQGetMessageOptions.matchOptions: 决定要检索哪种消息的选择标准。可以设置以下匹配选项:
    • MQMO_MATCH_CORREL_ID: 要检索的消息必须具有与 MQGET 调用的 MsgDesc 参数中 CorrelId 字段的值相匹配的关联标识符。此匹配是可能适用的任何其他匹配(例如,消息标识符)的补充。
    • MQMO_MATCH_GROUP_ID: 要检索的消息必须具有与 MQGET 调用的 MsgDesc 参数中 GroupId 字段的值相匹配的组标识符。此匹配是可能适用的任何其他匹配(例如,关联标识符)的补充。
    • MQMO_MATCH_MSG_ID: 要检索的消息必须具有与 MQGET 调用的 MsgDesc 参数中 MsgId 字段的值相匹配的消息标识符。此匹配是可能适用的任何其他匹配(例如,关联标识符)的补充。
    • MQMO_MATCH_MSG_SEQ_NUMBER: 要检索的消息必须具有与 MQGET 的 MQGMO 的 MsgDesc 参数中的字段 MsgSeqNumber 的值相匹配的消息序列号。此匹配是可能适用的任何其他匹配(例如,组标识符)的补充。
    • MQMO_NONE: 选择要返回的消息时请勿使用匹配项。队列中的所有消息都可以检索。MQMO_NONE 帮助程序文档。不应将此选项与任何其他 MQMO_* 选项一起使用,但是由于其值为零,因此无法检测到这种使用。
  • 获取 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: 打开队列以获取具有独占访问权限的消息。此打开队列与随后的 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 绑定选项:创建与指定绑定选项的命名队列管理器的连接。
    • 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 标头中转换信息的队列管理器的方式。除了 MQMessage.applicationIdData 和 MQMessage.putApplicationName 字段中的数据,WebSphere MQ 标头中的所有数据都来自 ASCII 代码集的不变量部分,

    如果避免使用这两个字段 ASCII 代码集的变量部分的字符,则可以将 CCSID 从 819 更改为任何其他 ASCII 代码集。 如果将其更改为与正在连接的队列管理器的客户端 CCSID 相同,则您在队列管理器上获得性能优势,因为它不会尝试转换消息标头。如果 CCSID 字段中没有提供值,则 SOAtest 或 Virtualize 将提供默认值 1208(UTF-8)。

SSL

可以配置以下 SSL 设置:

CipherSuite

CipherSuite 用于指定 MQ 通道上的 SSL 连接。请参阅 IBM MQ 文档,以确定根据 CipherSpec 选择哪个 CipherSuite。

可以从下拉菜单中指定固定的 CipherSuite 或输入一个 参数化变量以基于流量指定 CipherSuite。

Peer Name

(可选项)指定对等名称验证队列管理器提供的证书是否与对等名称参数指定的条件匹配。服务器验证将此参数与队列管理器提供的证书的 DN(可分辨名称)相匹配。

可以指定固定的对等名称或 输入一个参数化变量以基于流量指定对等名称。

Key Store

该设置指定用于客户端 SSL(队列管理器对客户端进行身份验证)的密钥存储库的位置。可以在 Parasoft> Preferences 下将工具配置为对所有项目使用密钥存储配置(请查阅 Security Settings)或者,您可以添加套件级全局设置属性,并配置套件中所有工具可用的密钥存储设置。请查阅添加全局测试组件属性 (SOAtest) 或 添加全局属性 (Virtualize)以获取其他详细信息。如果 MQ 通道不要求客户端对其进行身份验证,则不需要提供 Key Store 。

Trust Store

指定要用于服务器端 SSL(客户端对队列管理器进行身份验证)的信任存储。可以在 Parasoft> Preferences 下将工具配置为对所有项目使用信任存储配置(请查阅 Security Settings) )或者,您可以添加套件级 全局设置属性,并配置套件中所有工具可用的信任存储设置。请查阅添加全局测试组件属性 (SOAtest) 或 添加全局属性 (Virtualize)以获取其他详细信息。

通过指定 CipherSuite 并运行该工具尝试 SSL 连接后,将无法更改信任存储、密钥存储和密钥存储密码。  如果更改了它们,则需要在更改生效之前重新启动 SOAtest 或 Virtualize。

若要使用密匙库,则需下载并安装无限强度的 Java 加密扩展。有关更多详情,请查阅 JCE Prerequisite

Scripting Hook

Scripting Hook 选项允许您使用脚本语言(如Jython、Java、Groovy 和 JavaScript)自定义 MQ 属性。

如果需要有关使用脚本实用程序的详细信息,请参阅本教程的脚本部分。关于脚本 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 客户端、消息客户端等)发送和接收字符数据的最佳实践。

输入通讯报文

在发送字符数据(如 XML、CSV、固定长度或纯文本)时,格式类型必须设置为 MQFMT_STRING 常量的值,即“MQSTR”。

对于 SOAP 客户端工具,使用工具的 Misc > Outgoing Message Encoding 选项指定用来编码请求的字符集。  

其他适用工具(如:REST 客户端、消息客户端)使用产品的 Misc 首选项中配置的字符编码。

适用选项有:

  • IBM_037
  • IBM_437
  • ISO_8859_1
  • US_ASCII
  • UTF16
  • UTF8。

如果指定不同的编码,则 MQ 消息的字符集将默认为 MQCCSI_Q_MGR,它指的是“消息中的字符数据是队列管理器字符集中的消息。"

获取通讯报文

应该在客户端工具 MQGetMessageOptions (在 Transport 选项卡中)下启用 MQGMO_CONVERT 框。

这将指示队列管理员将消息转换为客户端工具的字符集。如果消息的原始字符集不是客户端(IBM_037、IBM_437 等)支持的功能之一,这该一点很重要。  

将用来执行转换的字符集配置为与 put 消息(如上所述)相同。



  • No labels