MQCMIT-落实更改
MQCMIT 调用向队列管理器指示应用程序已到达同步点,并且自上次同步点以来发生的所有消息获取和放置都将成为永久消息。
作为工作单元的一部分放入的消息可供其他应用程序使用; 作为工作单元的一部分检索的消息将被删除。
在 z/OS® 上,只有批处理程序(包括 IMS 批量 DL/I 程序)才会使用该调用。
语法
MQCMIT (Hconn、 CompCode、 Reason )
参数
- Hconn
- 类型 :MQHCONN-输入
此句柄表示与队列管理器的连接。 先前的 MQCONN 或 MQCONNX 调用返回了
Hconn的值。 - CompCode
- 类型:MQLONG - 输出完成代码;此完成代码为以下其中一项:
- MQCC_OK
- 成功完成。
- MQCC_WARNING
- 警告(部分完成)。
- MQCC_FAILED
- 调用失败。
- 原因
- 类型:MQLONG - 输出
列出的原因码是队列管理器可以针对 Reason 参数返回的原因码。
如果CompCode为 MQCC_OK:- MQRC_NONE
- (0, X'000') 没有要报告的原因。
如果CompCode为 MQCC_WARNING:- mqrc_backed_out
- (2003 年,X'7D3')工作单位退出。
- mqrc_outcome_pending
- (2124, X'84C') 提交操作结果待定。
如果CompCode是 MQCC_FAILED:- MQRC_ADAPTER_SERV_LOAD_ERROR
- (2130, X'852') 无法装入适配器服务模块。
- MQRC_API_EXIT_ERROR
- (2374, X'946') API 出口失败。
- MQRC_ASID_MISMATCH
- (2157, X'86D') 主 ASID (Primary ASID) 与主 ASID (home ASID) 不同。
- MQRC_CALL_IN_PROGRESS
- (2219, X'8AB') 在先前调用完成前输入了 MQI 调用。
- MQRC_CALL_中断
- (2549,X'9F5')MQPUT 或 MQCMIT 中断,重新连接处理无法重新确定结果。
- mqrc_cf_struc_in_use
- (2346,X'92A')使用中的耦合设施结构。
- MQRC_CONNECTION_BROKEN
- (2009, X'7D9') 与队列管理器的连接丢失。
- MQRC_ENVIRONMENT_ERROR
- (2012, X'7DC') 调用在环境中无效。
- MQRC_HCONN_ERROR
- (2018, X'7E2') 连接句柄无效。
- mqrc_object_damaged
- (2101 , X'835 ') 对象已损坏。
- mqrc_outcome_mixed
- (2123, X'84B') 提交或退出操作的结果是混合的。
- MQRC_Q_MGR_STOPPING
- (2162, X'872') 队列管理器正在关闭。
- mqrc_reconnect_failed
- (2548,X'9F4')重新连接后,为可重新连接的连接恢复句柄时发生错误。
- MQRC_RESOURCE_PROBLEM
- (2102, X'836') 没有足够系统资源可用。
- mqrc_storage_medium_full
- (2192 , X'890 ') 外部存储介质已满。
- MQRC_STORAGE_NOT_AVAILABLE
- (2071, X'817') 没有足够的存储空间可用。
- MQRC_UNEXPECTED_ERROR
- (2195, X'893') 发生了意外错误。
有关这些代码的详细信息,请参阅 消息和原因码。
使用说明
- 仅当队列管理器本身协调工作单元时,才使用此调用。 这可以是:
- 本地工作单元,其中更改仅影响 IBM® MQ 资源。
- 全局工作单元,其中的更改可能会影响属于其他资源管理器的资源以及影响 IBM MQ 资源。
- 在队列管理器未协调工作单元的环境中,必须使用相应的落实调用来代替 MQCMIT。 环境还可能支持由应用程序正常终止而导致的隐式落实。
- 在 z/OS上,使用以下调用:
- 如果工作单元仅影响 IBM MQ 资源,那么批处理程序 (包括 IMS 批处理 DL/I 程序) 可以使用 MQCMIT 调用。 但是,如果工作单元同时影响 IBM MQ 资源和属于其他资源管理器的资源 (例如 Db2® ) ,请使用 z/OS 可恢复资源服务 (RRS) 提供的 SRRCMIT 调用。 SRRCMIT 调用会将更改落实到属于已启用 RRS 协调的资源管理器的资源。
- CICS® 应用程序必须使用
EXEC CICS SYNCPOINT命令来显式落实工作单元。 或者,结束事务会导致隐式落实工作单元。 MQCMIT 调用不能用于 "CICS应用程序。 - IMS 应用程序 (非批处理 DL/I 程序) 必须使用 IMS 调用 (例如
GU和CHKP) 来落实工作单元。 MQCMIT 调用不能用于 IMS 应用程序 (批处理 DL/I 程序除外)。
- 在 IBM i上,将此调用用于队列管理器协调的本地工作单元。 这意味着在作业级别不得存在落实定义,即,不得对该作业发出带有 CMTSCOPE(*JOB) 参数的
STRCMTCTL命令。
- 在 z/OS上,使用以下调用:
- 如果应用程序在工作单元中以未落实的更改结束,那么这些更改的处置取决于应用程序是正常结束还是异常结束。 请参阅 MQDISC 用法说明 以获取更多详细信息。
- 当应用程序在逻辑消息的组或段中放置或获取消息时,队列管理器会保留与消息组和逻辑消息相关的信息,以用于上次成功的 MQPUT 和 MQGET 调用。 此信息与队列句柄相关联,并包括如下内容:
- MQMD 中
GroupId,MsgSeqNumber,Offset和MsgFlags字段的值。 - 消息是否是工作单元的一部分。
- 对于 MQPUT 调用: 消息是持久消息还是非持久消息。
落实工作单元时,队列管理器会保留组和段信息,并且应用程序可以继续将消息放入当前消息组或逻辑消息中或获取消息。
在落实工作单元时保留组和段信息允许应用程序在多个工作单元之间传播由多个段组成的大型消息组或大型逻辑消息。 如果本地队列管理器只有有限的队列存储器,那么使用多个工作单元是有利的。 但是,如果发生系统故障,应用程序必须保留足够的信息以重新启动在正确位置放置或获取消息。 有关在系统故障后如何在正确位置重新启动的详细信息,请参阅 MQPMO_LOGICAL_ORDER 和 MQGMO_LOGICAL_ORDER。
仅当队列管理器协调工作单元时,其余使用说明才适用:
- MQMD 中
- 工作单元具有与连接句柄相同的作用域; 必须使用同一连接句柄来执行影响特定工作单元的所有 IBM MQ 调用。 使用另一个连接句柄 (例如,另一个应用程序发出的调用) 发出的调用会影响另一个工作单元。 请参阅 MQCONN 中描述的 Hconn 参数,以获取有关连接句柄作用域的信息。
- 只有作为当前工作单元的一部分放入或检索的消息才会受此调用影响。
- 在工作单元中发出 MQGET , MQPUT 或 MQPUT1 调用但从不发出落实或回退调用的长时间运行的应用程序可以使用不可用于其他应用程序的消息填充队列。 要防止发生此情况,管理员必须将 MaxUncommittedMsgs 队列管理器属性设置为足以防止失控应用程序填充队列的值,但设置为足以允许期望的消息传递应用程序正确工作的值。
在 AIX®, Linux®, and Windows 系统上,如果 Reason 参数为 MQRC_CONNECTION_BROKEN(CompCode为 MQCC_FAILED)或 MQRC_UNEXPECTED_ERROR,则工作单元有可能已成功提交。- 如果应用程序在工作单元中包含了持久消息的投放,而 MQPUT 或 MQPUT1 调用使用了 MQPMO_ASYNC_RESPONSE 选项,且投放失败,则 MQCMIT 返回 MQCC_FAILED、MQRC_BACKED_OUT。 请参阅 MQPMO 的字段详细信息中 MQPMO_ASYNC_RESPONSE 的描述。
在类似情况下,对于工作单元内的非持久消息,MQCMIT 返回 MQCC_OK、MQRC_NONE。
在使用 MQPMO_ASYNC_RESPONSE 的情况下,如果有多个投放,那么投放任何持久消息失败都会导致 MQCMIT 调用以 MQCC_FAILED、MQRC_BACKED_OUT 返回。
C 调用
MQCMIT (Hconn, &CompCode, &Reason);
按如下所示声明参数:
MQHCONN Hconn; /* Connection handle */
MQLONG CompCode; /* Completion code */
MQLONG Reason; /* Reason code qualifying CompCode */
COBOL 调用
CALL 'MQCMIT' 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 MQCMIT (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 */
高级汇编程序调用
CALL MQCMIT,(HCONN,COMPCODE,REASON)
按如下所示声明参数:
HCONN DS F Connection handle
COMPCODE DS F Completion code
REASON DS F Reason code qualifying COMPCODE
Visual Basic 调用
MQCMIT Hconn, CompCode, Reason
按如下所示声明参数:
Dim Hconn As Long 'Connection handle'
Dim CompCode As Long 'Completion code'
Dim Reason As Long 'Reason code qualifying CompCode'