MQDISC-断开连接队列管理器

MQDISC 调用会中断队列管理器与应用程序之间的连接,并且是 MQCONN 或 MQCONNX 调用的反向调用。

  • z/OS®上,所有使用异步消息使用,事件处理或回调的应用程序,主控制线程必须在结束之前发出 MQDISC 调用。 有关更多详细信息,请参阅 异步使用 IBM® MQ 消息
  • z/OS上, CICS® 应用程序不需要发出此调用以与队列管理器断开连接。
    如果 CICS 应用程序确实执行了此调用,那么除非执行了较早的 MQCONNX 调用,否则此调用不会生效,请指定下列其中一项:
    • MQCNO_SERIALIZE_CONN_TAG_Q_MGR
    • MQCNO_SERIALIZE_CONN_TAG_QSG
    • MQCNO_RESTRICT_CONN_TAG_Q_MGR 或
    • MQCNO_RESTRICT_CONN_TAG_QSG
    选项,在这种情况下,将关闭所有当前打开的对象句柄。

语法

MQDISC (HconnCompCodeReason

参数

Hconn
类型 :MQHCONN-输入/输出

此句柄表示与队列管理器的连接。 先前的 MQCONN 或 MQCONNX 调用返回了 Hconn 的值。

z/OS for CICS 应用程序上,您可以省略 MQCONN 调用,并为 Hconn 指定以下值:
MQHC_DEF_HCONN
缺省连接句柄。
成功完成调用时,队列管理器会将 Hconn 设置为不是环境的有效句柄的值。 此值为:
mqhc_unusable_hconn
不可用的连接句柄。

z/OS上, Hconn 设置为未定义的值。

CompCode
类型:MQLONG - 输出
完成代码; 它是下列其中一个代码:
MQCC_OK
成功完成。
MQCC_WARNING
警告(部分完成)。
MQCC_FAILED
调用失败。
原因
类型:MQLONG - 输出
如果 CompCode 为 MQCC_OK:
MQRC_NONE
(0, X'000') 没有要报告的原因。
如果 CompCode 为 MQCC_WARNING:
mqrc_backed_out
(2003 年,X'7D3')工作单位退出。
mqrc_conn_tag_not_released
(2344 , X' 928 ') 未释放连接标记。
mqrc_outcome_pending
(2124, X'84C') 提交操作结果待定。
如果 CompCode 是 MQCC_FAILED:
mqrc_adapter_disc_load_error
(2138,X'85A')无法加载适配器断开模块。
MQRC_ADAPTER_NOT_AVAILABLE
(2204, X'89C') 适配器不可用。
MQRC_ADAPTER_SERV_LOAD_ERROR
(2130, X'852') 无法装入适配器服务模块。
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_CALL_IN_PROGRESS
(2219, X'8AB') 在先前调用完成前输入了 MQI 调用。
MQRC_CONNECTION_BROKEN
(2009, X'7D9') 与队列管理器的连接丢失。
MQRC_CONNECTION_STOPPING
(2203, X'89B') 连接正在关闭。
MQRC_HCONN_ERROR
(2018, X'7E2') 连接句柄无效。
mqrc_outcome_mixed
(2123, X'84B') 提交或退出操作的结果是混合的。
mqrc_pageset_error
(2193 , X'891 ') 访问页集数据集时出错。
MQRC_Q_MGR_NAME_ERROR
(2058, X'80A') 队列管理器名称无效或者未知。
MQRC_Q_MGR_NOT_AVAILABLE
(2059, X'80B') 队列管理器针对连接不可用。
MQRC_Q_MGR_STOPPING
(2162, X'872') 队列管理器正在关闭。
MQRC_RESOURCE_PROBLEM
(2102, X'836') 没有足够系统资源可用。
MQRC_STORAGE_NOT_AVAILABLE
(2071, X'817') 没有足够的存储空间可用。
MQRC_UNEXPECTED_ERROR
(2195, X'893') 发生了意外错误。

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

使用说明

  1. 如果在连接仍打开该连接下的对象时发出 MQDISC 调用,那么队列管理器将关闭这些对象,并将关闭选项设置为 MQCO_NONE。
  2. 如果应用程序以工作单元中未落实的更改结束,那么这些更改的处置取决于应用程序的结束方式:
    1. 如果应用程序在结束之前发出 MQDISC 调用:
      • 对于队列管理器协调的工作单元,队列管理器代表应用程序发出 MQCMIT 调用。 如果可能,将落实工作单元,否则将回退工作单元。

      • 对于外部协调的工作单元,工作单元的状态没有变化; 但是,队列管理器通常指示工作单元必须在工作单元协调程序询问时落实。

        z/OS上, CICSIMS (批处理 DL/1 程序除外) 和 RRS 应用程序与此类似。

    2. 如果应用程序正常结束但未发出 MQDISC 调用,那么所执行的操作取决于环境:
      • z/OS上,除 MQ Java 或 MQ JMS 应用程序外,将发生注释 2a 中描述的操作。
      • 在所有其他情况下,会发生注释 2c 中描述的操作。
      由于环境之间的差异,请确保要端口的应用程序在结束之前落实或回退工作单元。
    3. 如果应用程序 异常 结束而不发出 MQDISC 调用,那么将回退工作单元。
  3. z/OS上,以下要点适用:
    • CICS 应用程序不必发出 MQDISC 调用来与队列管理器断开连接,因为 CICS 系统本身会连接到队列管理器,并且 MQDISC 调用不会影响此连接。
    • CICSIMS (非批处理 DL/1 程序) 和 RRS 应用程序使用由外部工作单元协调程序协调的工作单元。 因此, MQDISC 调用不会影响发出调用时存在的工作单元 (如果有) 的状态。

      但是, MQDISC 调用 确实 指示结束使用由应用程序发出的较早 MQCONNX 调用与连接关联的连接标记 ConnTag 。 如果发出 MQDISC 调用时存在引用连接标记的活动工作单元,那么调用将完成,完成代码为 MQCC_WARNING ,原因码为 MQRC_CONN_TAG_NOT_RELEASED。 直到外部工作单元协调程序已解析工作单元之后,连接标记才可供复用。

注:CICS中,不支持 MQOP_START。 请改为使用 MQOP_START_WAIT 函数调用。

C 调用

MQDISC (&Hconn, &CompCode, &Reason);
按如下所示声明参数:
MQHCONN  Hconn;     /* Connection handle */
MQLONG   CompCode;  /* Completion code */
MQLONG   Reason;    /* Reason code qualifying CompCode */

COBOL 调用

CALL 'MQDISC' USING HCONN, COMPCODE, REASON.
按如下所示声明参数:
**   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 MQDISC (Hconn, CompCode, Reason);
按如下所示声明参数:
dcl Hconn     fixed bin(31);  /* Connection handle */
dcl CompCode  fixed bin(31);  /* Completion code */
dcl Reason    fixed bin(31);  /* Reason code qualifying CompCode */

System/390 汇编程序调用

CALL MQDISC,(HCONN,COMPCODE,REASON)
按如下所示声明参数:
HCONN     DS  F  Connection handle
COMPCODE  DS  F  Completion code
REASON    DS  F  Reason code qualifying COMPCODE

Visual Basic 调用

MQDISC Hconn, CompCode, Reason
按如下所示声明参数:
Dim Hconn    As Long 'Connection handle'
Dim CompCode As Long 'Completion code'
Dim Reason   As Long 'Reason code qualifying CompCode'