MQCONNX-连接队列管理器 (扩展)

MQCONNX 调用将应用程序连接到队列管理器。 它提供队列管理器连接句柄,供应用程序在后续 IBM® MQ 调用时使用。

MQCONNX 调用类似于 MQCONN 调用,只是 MQCONNX 允许指定选项来控制调用的工作方式。
  • 此调用在所有 IBM MQ 系统以及连接到这些系统的 IBM MQ 客户机上都受支持。
无法在纯服务器安装中进行客户机连接,并且无法在纯客户机安装中进行本地连接。

语法

MQCONNX (QMgrName, 连接选项, Hconn, CompCode, 原因)

参数

QMgrName
类型:MQCHAR48 - 输入

请参阅 MQCONN-Connect 队列管理器 中描述的 QMgrName 参数以获取详细信息。

ConnectOpts
类型 :MQCNO-输入/输出

请参阅 MQCNO-Connect 选项 以获取详细信息。

Hconn
类型:MQHCONN - 输出

此句柄表示与队列管理器的连接。 在由应用程序发出的所有后续消息排队调用上指定此句柄。 发出 MQDISC 调用时,或者当定义句柄作用域的处理单元终止时,此句柄将不再有效。

IBM MQ 现在提供了具有客户机软件包和服务器软件包的 mqm 库。 这意味着执行 mqm 库中找到的 MQI 调用时,将检查连接类型以查看它属于客户机连接还是服务器连接,然后执行正确的底层调用。 因此,现在可针对 mqm 库链接传递 Hconn 的出口,但在客户机安装上使用此出口。

句柄作用域: 返回的句柄作用域取决于用于连接到队列管理器 (MQCONN 或 MQCONNX) 的调用。 如果使用的调用是 MQCONNX ,那么句柄的作用域还取决于 MQCNO 结构的 Options 字段中指定的 MQCNO_HANDLE_SHARE_ * 选项。
  • 如果调用为 MQCONN,或者如果指定了 MQCNO_HANDLE_SHARE_NONE 选项,那么返回的句柄为非共享句柄。

    非共享句柄的作用域是运行应用程序的平台所支持的最小并行处理单元 (请参阅 表 1 以获取详细信息); 句柄在发出调用的并行处理单元之外无效。

  • 如果指定 MQCNO_HANDLE_SHARE_BLOCK 或 MQCNO_HANDLE_SHARE_NO_BLOCK 选项,那么返回的句柄为共享句柄。

    共享句柄的作用域为拥有从中发出调用的线程的进程;可从属于该进程的任何线程使用此句柄。 并非所有平台都支持线程。

  • 如果 MQCONN 或 MQCONNX 调用失败,并且完成代码为 MQCC_FAILED,那么 Hconn 值未定义。
表 1. 各种平台上非共享句柄的作用域
平台 非共享句柄的作用域
z/OS®
  • CICS®: CICS 任务
  • IMS: 任务,直至下一个同步点 (不包括任务的子任务)
  • z/OS 批处理和 TSO: 任务 (不包括任务的子任务)
IBM i 作业
UNIX 线程
32 位 Windows 应用程序 线程
64 位 Windows 应用程序 线程
z/OS for CICS 应用程序上,返回的值为:
MQHC_DEF_HCONN
缺省连接句柄。
CompCode
类型:MQLONG - 输出

请参阅 MQCONN-Connect 队列管理器 中描述的 CompCode 参数以获取详细信息。

原因
类型:MQLONG - 输出

MQCONN 和 MQCONNX 调用可返回以下代码。 有关 MQCONNX 调用可返回的其他代码的列表,请参阅以下代码。

如果 CompCode 为 MQCC_OK:
MQRC_NONE
(0, X'000') 没有要报告的原因。
如果 CompCode 为 MQCC_WARNING:
MQRC_ALREADY_CONNECTED
(2002, X'7D2') 应用程序已连接。
MQRC_CLUSTER_EXIT_LOAD_ERROR
(2267, X'8DB') 无法装入集群工作负载出口。
MQRC_SSL_ALREADY_INITIALIZED
(2391, X'957') 已初始化 SSL。
如果 CompCode 是 MQCC_FAILED:
MQRC_ADAPTER_CONN_LOAD_ERROR
(2129, X'851') 无法装入适配器连接模块。
MQRC_ADAPTER_DEFS_ERROR
(2131, X'853') 适配器子系统定义模块无效。
MQRC_ADAPTER_DEFS_LOAD_ERROR
(2132, X'854') 无法装入适配器子系统定义模块。
MQRC_ADAPTER_NOT_AVAILABLE
(2204, X'89C') 适配器不可用。
MQRC_ADAPTER_SERV_LOAD_ERROR
(2130, X'852') 无法装入适配器服务模块。
MQRC_ADAPTER_STORAGE_SHORTAGE
(2127, X'84F') 适配器存储空间不足。
MQRC_ANOTHER_Q_MGR_CONNECTED
(2103, X'837') 已连接另一个队列管理器。
MQRC_API_EXIT_ERROR
(2374, X'946') API 出口失败。
MQRC_API_EXIT_INIT_ERROR
(2375, X'947') API 出口初始化失败。
MQRC_API_EXIT_TERM_ERROR
(2376, X'948') API 出口终止失败。
MQRC_ASID_MISMATCH
(2157, X'86D') 主 ASID (Primary ASID) 与主 ASID (home ASID) 不同。
MQRC_BUFFER_LENGTH_ERROR
(2005, X'7D5') 缓冲区长度参数无效。
MQRC_CALL_IN_PROGRESS
(2219, X'8AB') 在先前调用完成前输入了 MQI 调用。
MQRC_CONN_ID_IN_USE
(2160, X'870') 连接标识已在使用中。
MQRC_CONNECTION_BROKEN
(2009, X'7D9') 与队列管理器的连接丢失。
MQRC_CONNECTION_ERROR
(2273, X'8E1') 处理 MQCONN 调用时出错。
MQRC_CONNECTION_NOT_AVAILABLE
(2568, X'A08') 当队列管理器无法在当前安装中提供所请求连接类型的连接时,在 MQCONN 或 MQCONNX 调用上发生此情况。 无法在纯服务器安装中进行客户机连接。 无法在纯客户机安装中进行本地连接。
MQRC_CONNECTION_QUIESCING
(2202, X'89A') 连接正在停顿。
MQRC_CONNECTION_STOPPING
(2203, X'89B') 连接正在关闭。
MQRC_CRYPTO_HARDWARE_ERROR
(2382, X'94E') 加密硬件配置错误。
MQRC_DUPLICATE_RECOV_COORD
(2163, X'873') 恢复协调程序已存在。
MQRC_ENVIRONMENT_ERROR
(2012, X'7DC') 调用在环境中无效。

此外,在 MQCONNX 调用上,从 CICS 或 IMS 应用程序传递 MQCSP-安全性参数 控制块。

MQRC_HCONN_ERROR
(2018, X'7E2') 连接句柄无效。
MQRC_HOST_NOT_AVAILABLE
(2538, X'9EA') 从客户机发出了 MQCONN 调用以连接到队列管理器,但尝试将对话分配给远程系统失败。
MQRC_INSTALLATION_MISMATCH
(2583, X'A17') 在队列管理器安装与所选库之间存在不匹配。
MQRC_KEY_REPOSITORY_ERROR
(2381, X'94D') 密钥存储库无效。
MQRC_MAX_CONNS_LIMIT_REACHED
(2025, X'7E9') 已达到最大连接数。
MQRC_NOT_AUTHORIZED
(2035, X'7F3') 未获得访问授权。
MQRC_OPEN_FAILED
(2137, X'859') 对象未成功打开。
MQRC_Q_MGR_NAME_ERROR
(2058, X'80A') 队列管理器名称无效或者未知。
MQRC_Q_MGR_NOT_AVAILABLE
(2059, X'80B') 队列管理器针对连接不可用。
MQRC_Q_MGR_QUIESCING
(2161, X'871') 队列管理器正在停顿。
MQRC_Q_MGR_STOPPING
(2162, X'872') 队列管理器正在关闭。
MQRC_RESOURCE_PROBLEM
(2102, X'836') 没有足够系统资源可用。
MQRC_SECURITY_ERROR
(2063, X'80F') 发生了安全性错误。
MQRC_SSL_INITIALIZATION_ERROR
(2393, X'959') SSL 初始化错误。
MQRC_STORAGE_NOT_AVAILABLE
(2071, X'817') 没有足够的存储空间可用。
MQRC_UNEXPECTED_ERROR
(2195, X'893') 发生了意外错误。

MQCONNX 调用可返回以下其他原因码:

如果 CompCode 是 MQCC_FAILED:
MQRC_AIR_ERROR
(2385 , X' 951 ') 认证信息记录无效。
MQRC_AUTH_INFO_CONN_NAME_ERROR
(2387 , X' 953 ') 认证信息连接名称无效。
MQRC_AUTH_INFO_REC_COUNT_ERROR
(2383,X'94F')验证信息记录计数无效。
MQRC_AUTH_INFO_REC_ERROR
(2384 , X' 950 ') 认证信息记录字段无效。
MQRC_AUTH_INFO_TYPE_ERROR
(2386 , X' 952 ') 认证信息类型无效。
MQRC_CD_ERROR
(2277,X'8E5') 通道定义无效。
MQRC_CLIENT_CONN_ERROR
(2278,X'8E6') 客户端连接字段无效。
MQRC_CNO_ERROR
(2139,X'85B')连接选项结构无效。
MQRC_CONN_TAG_IN_USE
(2271,X'8DF')使用中的连接标记。
MQRC_CONN_TAG_NOT_USABLE
(2350,X'92E')连接标签不可用。
MQRC_LDAP_PASSWORD_ERROR
(2390 , X' 956 ') LDAP 密码无效。
MQRC_LDAP_USER_NAME_ERROR
(2388 , X' 954 ') LDAP 用户名字段无效。
MQRC_LDAP_USER_NAME_LENGTH_ERR
(2389 , X' 955 ') LDAP 用户名长度无效。
MQRC_OPTIONS_ERROR
(2046,X'7FE') 选项无效或不一致。
MQRC_SCO_ERROR
(2380,X'94C') SSL 配置选项结构无效。
MQRC_SSL_CONFIG_ERROR
(2392 , X' 958 ') SSL 配置错误。

有关这些代码的详细信息,请参阅 消息和原因码

使用说明

对于 Visual Basic 编程语言,以下要点适用:
  • ConnectOpts 参数声明为 MQCNO 类型。 如果应用程序作为 IBM MQ MQI client运行,并且要指定客户机连接通道的参数,请将 ConnectOpts 参数声明为 Any类型,以便应用程序可以在调用上指定 MQCNOCD 结构以代替 MQCNO 结构。 但是,这意味着无法检查 ConnectOpts 参数以确保它是正确的数据类型。

C 调用

MQCONNX (QMgrName, &ConnectOpts, &Hconn, &CompCode, &Reason);
按如下所示声明参数:
MQCHAR48  QMgrName;     /* Name of queue manager */
MQCNO     ConnectOpts;  /* Options that control the action of MQCONNX */
MQHCONN   Hconn;        /* Connection handle */
MQLONG    CompCode;     /* Completion code */
MQLONG    Reason;       /* Reason code qualifying CompCode */

COBOL 调用

CALL 'MQCONNX' USING QMGRNAME, CONNECTOPTS, HCONN, COMPCODE,
REASON.
按如下所示声明参数:
**   Name of queue manager
 01  QMGRNAME     PIC X(48).
**   Options that control the action of MQCONNX
 01  CONNECTOPTS.
     COPY CMQCNOV.
**   Connection handle
 01  HCONN        PIC S9(9) BINARY.
**   Completion code
 01  COMPCODE     PIC S9(9) BINARY.
**   Reason code qualifying COMPCODE
 01  REASON       PIC S9(9) BINARY.

PL/I 调用

call MQCONNX (QMgrName, ConnectOpts, Hconn, CompCode, Reason);
按如下所示声明参数:
dcl QMgrName     char(48);       /* Name of queue manager */
dcl ConnectOpts  like MQCNO;     /* Options that control the action of
                                    MQCONNX */
dcl Hconn        fixed bin(31);  /* Connection handle */
dcl CompCode     fixed bin(31);  /* Completion code */
dcl Reason       fixed bin(31);  /* Reason code qualifying CompCode */

高级汇编程序调用

CALL MQCONNX,(QMGRNAME,CONNECTOPTS,HCONN,COMPCODE,REASON)
按如下所示声明参数:
QMGRNAME     DS       CL48  Name of queue manager
CONNECTOPTS  CMQCNOA  ,     Options that control the action of MQCONNX
HCONN        DS       F     Connection handle
COMPCODE     DS       F     Completion code
REASON       DS       F     Reason code qualifying COMPCODE

Visual Basic 调用

MQCONNX QMgrName, ConnectOpts, Hconn, CompCode, Reason
按如下所示声明参数:
Dim QMgrName    As String*48 'Name of queue manager'
Dim ConnectOpts As MQCNO     'Options that control the action of'
                             'MQCONNX'
Dim Hconn       As Long      'Connection handle'
Dim CompCode    As Long      'Completion code'
Dim Reason      As Long      'Reason code qualifying CompCode'