MQMD 的反馈 (MQLONG)
"反馈" 字段与 MQMT_REPORT 类型的消息配合使用,以指示报告的性质,并且仅对该类型的消息有意义。
该字段可以包含其中一个 MQFB_ * 值或其中一个 MQRC_ * 值。 反馈代码分组如下:
- MQFB_NONE
- 未提供反馈。
- MQFB_SYSTEM_FIRST
- 系统生成的反馈的最小值。
- MQFB_SYSTEM_LAST
- 系统生成的反馈的最高值。
系统生成的反馈代码 MQFB_SYSTEM_FIRST 到 MQFB_SYSTEM_LAST 的范围包括本主题中列出的常规反馈代码 (MQFB_ *) ,以及无法将消息放入目标队列时可能发生的原因码 (MQRC_ *)。
- MQFB_APPL_FIRST
- 应用程序生成的反馈的最低值。
- MQFB_APPL_LAST
- 应用程序生成的反馈的最高值。
生成报告消息的应用程序不得使用系统范围内的反馈代码 (MQFB_QUIT 除外) ,除非它们想要模拟队列管理器或消息通道代理程序生成的报告消息。
在 MQPUT 或 MQPUT1 调用上,指定的值必须是 MQFB_NONE ,或者在系统范围或应用程序范围内。 无论 MsgType的值如何,都将选中此项。
常规反馈代码:
- MQFB_证书
- 确认到达目标队列 (请参阅 MQRO_COA)。
- MQFB_COD
- 确认传递到接收应用程序 (请参阅 MQRO_COD)。
- MQFB_EXPIRATION
- 由于未在到期时间之前将消息从目标队列中除去,因此已废弃该消息。
- MQFB_PAN
- 肯定操作通知 (请参阅 MQRO_PAN)。
- MQFB_NAN
- 负面操作通知 (请参阅 MQRO_NAN)。
- MQFB_退出
- 结束应用程序。
这可以由工作负载调度程序用于控制正在运行的应用程序的实例数。 将带有此反馈代码的 MQMT_REPORT 消息发送到应用程序的实例向该实例指示它应该停止处理。 但是,遵守此约定是应用程序的事; 队列管理器不会强制执行此约定。
通道反馈代码:
- 消息队列框架通道完成
- 通道正常结束。
- 消息队列故障通道故障
- 通道异常结束并进入 STOPPED 状态。
- 消息队列故障重试通道
- 通道异常结束并进入 RETRY 状态。
IMS-bridge 反馈代码
当接收到意外的 IMS-OTMA 检测代码时,将使用这些代码。 检测代码或在检测代码为 0x1A 时与该检测代码关联的原因码在 反馈中指示。
- 对于范围在 MQFB_IMS_FIRST (300) 到 MQFB_IMS_LAST (399) 之间的 反馈 代码,接收到非 0x1A 的检测代码。 检测代码 由表达式 (Feedback - MQFB_IMS_FIRST+1) 提供
- 对于范围为 MQFB_IMS_NACK_1A_REASON_FIRST (600) 到 MQFB_IMS_NACK_1A_REASON_LAST (855) 的 反馈 代码,接收到检测代码 0x1A 。 与检测代码关联的 原因码 由表达式 (Feedback - MQFB_IMS_NACK_1A_REASON_FIRST) 提供
Open Transaction Manager Access Guide and Reference中描述了 IMS-OTMA 检测代码和相应原因码的含义。
IMS 网桥可以生成以下反馈代码:
- MQFB_数据长度为零
- 消息的应用程序数据中的段长度为零。
- MQFB_DATA_LENGTH_负数
- 消息的应用程序数据中的段长度为负数。
- 消息队列数据长度过大
- 段长度在消息的应用程序数据中过大。
- MQFB_缓冲区溢出
- 其中一个长度字段的值将导致数据溢出消息缓冲区。
- MQFB_长度偏移量为1
- 其中一个长度字段的值 1 字节太短。
- MQFB_IIH_ERROR
- MQMD 中的
Format字段指定 MQFMT_IMS ,但消息未以有效的 MQIIH 结构开头。 - MQFB_NOT_AUTHORIZED_FOR_IM
- 消息描述符 MQMD 中包含的用户标识或 MQIIH 结构中
Authenticator字段中包含的密码未能通过 IMS 网桥执行的验证。 因此,消息未传递到 IMS。 - MQFB_IMS_ERROR
- IMS返回了意外错误。 请参阅 IMS 网桥所在系统上的 IBM® MQ 错误日志,以获取有关该错误的更多信息。
- MQFB_IMS_FIRST
- 当 IMS-OTMA 检测代码不是 0x1A时, IMS生成的反馈代码在 MQFB_IMS_FIRST (300) 到 MQFB_IMS_LAST (399) 的范围内。 IMS-OTMA 检测代码本身为
Feedback减去 MQFB_IMS_ERROR。 - MQFB_IMS_LAST
- 检测代码不是 0x1A时 IMS生成的反馈的最大值。
- MQFB_IMS_NACK_1A_REASON_FIRST
- 当检测代码为 0x1A时, IMS生成的反馈代码在 MQFB_IMS_NACK_1A_REASON_FIRST (600) 到 MQFB_IMS_NACK_1A_REASON_LAST (855) 范围内。
- MQFB_IMS_NACK_1A_REASON_LAST
- 检测代码为 0x1A 时 IMS生成的反馈的最大值
CICS®-bridge 反馈代码: CICS bridge可以生成以下反馈代码:
- MQFB_CICS_APPL_AB已结束
- 消息中指定的应用程序异常结束。 此反馈代码仅出现在 MQDLH 结构的
Reason字段中。 - MQFB_CICS_应用程序未启动
- 消息中指定的应用程序的 EXEC CICS LINK 失败。 此反馈代码仅出现在 MQDLH 结构的
Reason字段中。 - MQFB_CICS_BRIDGE_FAILURE
- CICS bridge 异常终止,但未完成正常错误处理。
- MQFB_CICS_CCSID_ERROR
- 字符集标识无效。
- MQFB_CICS_CIH_错误
- CICS 信息头结构缺失或无效。
- MQFB_CICS_COMMAREA_ERROR
- CICS COMMAREA 的长度无效。
- MQFB_CICS_关联ID错误
- 相关标识无效。
- MQFB_CICS_DLQ_ERROR
- CICS bridge 任务无法将对此请求的应答复制到死信队列。 请求已回退。
- MQFB_CICS_编码错误
- 编码无效。
- MQFB_CICS_内部错误
- CICS bridge 迂到意外错误。
此反馈代码仅出现在 MQDLH 结构的
Reason字段中。 - MQFB_CICS_未授权
- 用户标识未授权或密码无效。
此反馈代码仅出现在 MQDLH 结构的
Reason字段中。 - MQFB_CICS_事务单元_撤销
- 由于下列原因之一,工作单元已回退:
- 在同一工作单元中处理另一个请求时检测到故障。
- 工作单元正在进行时发生 CICS 异常终止。
- MQFB_CICS_UOW_ERROR
- 工作单元控制字段
UOWControl无效。
跟踪路由消息反馈代码:
- MQFB_活动
- 与 MQFMT_EMBEDDED_PCF 格式配合使用,以允许在活动报告之后选择用户数据。
- MQFB_MAX_ACTIVactivities
- 由于涉及消息的活动数超过最大活动数限制而废弃跟踪路由消息时返回。
- MQFB_NOT_FORWARD
- 由于要将跟踪路由消息发送至不支持跟踪路由消息的远程队列管理器而废弃该消息时返回。
- MQFB_NOT_交付
- 由于要将跟踪路由消息放入本地队列而废弃该消息时返回。
- MQFB_UNSUPPORTED_转发
- 由于转发参数中的值无法识别并且在被拒绝的位掩码中,因此废弃跟踪路由消息时返回。
- MQFB_不支持的配送方式
- 由于 delivery 参数中的值无法识别并且在被拒绝的位掩码中,因此废弃 trace-route 消息时返回。
IBM MQ 原因码: 对于异常报告消息,
Feedback 包含 IBM MQ 原因码。 可能的原因码包括:- MQRC_PUT_禁止
- (2051 , X'803 ') 对队列禁止 Put 调用。
- MQRC_Q_完整
- (2053 , X'805 ') 队列已包含最大消息数。
- MQRC_NOT_AUTHORIZED
- (2035, X'7F3') 未获得访问授权。
- MQRC_Q_SPACE_NOT_AVAILABLE
- (2056 , X'808 ') 磁盘上没有可用于队列的空间。
- MQRC_PERSISTENT_NOT_ALLOWED
- (2048 , X'800 ') 队列不支持持久消息。
- 消息过大,无法放入队列管理器
- (2031, X'7EF' ') 消息长度超过队列管理器的最大值。
- 消息过大无法放入队列
- (2030, X'7EE' ') 消息长度超过队列的最大限制。
有关原因码的完整列表,请参阅:
- 对于 IBM MQ for z/OS®,请参阅 API 完成代码和原因码。
- 对于所有其他平台,请参阅 API 完成代码和原因码。
这是 MQGET 调用的输出字段,也是 MQPUT 和 MQPUT1 调用的输入字段。 此字段的初始值为 MQFB_NONE。