多点广播异常报告

使用此信息可了解 "IBM® MQ组播事件处理程序和报告 "IBM MQ组播异常。

IBM MQ 多点广播通过调用事件处理程序以报告使用标准 IBM MQ 事件处理程序机制报告的多点广播事件来帮助确定问题。

单个多点广播事件可能会导致调用多个 IBM MQ 事件,因为可能有多个 MQHCONN 连接句柄使用同一个多点广播发送器或接收器。 但是,每个多点广播异常只会导致每个 IBM MQ 连接调用一个事件处理程序。

IBM MQ MQCBDO_EVENT_CALL 常量使应用程序能够注册回调以仅接收 IBM MQ 事件,而 MQCBDO_MC_EVENT_CALL 使应用程序能够注册回调以仅接收多点广播事件。 如果同时使用这两个常量,那么将同时接收到这两种类型的事件。

请求多点广播事件

IBM MQ 多点广播事件在 cbd.Options 字段中使用 MQCBDO_MC_EVENT_CALL 常量。 以下示例演示如何请求多点广播事件:
cbd.CallbackType     = MQCBT_EVENT_HANDLER;
cbd.Options          = MQCBDO_MC_EVENT_CALL;
cbd.CallbackFunction = EventHandler;
MQCB(Hcon,MQOP_REGISTER,&cbd,MQHO_UNUSABLE_HOBJ,NULL,NULL,&CompCode,&Reason);
cbd.Options 字段指定 MQCBDO_MC_EVENT_CALL 选项时,将仅向事件处理程序发送 IBM MQ 多点广播事件,而不是连接级别事件。 要请求将两种类型的事件都发送到事件处理程序,应用程序必须在 cbd.Options 字段中指定 MQCBDO_EVENT_CALL 常量以及 MQCBDO_MC_EVENT_CALL 常量,如以下示例中所示:
cbd.CallbackType     = MQCBT_EVENT_HANDLER;
cbd.Options          = MQCBDO_EVENT_CALL | MQCBDO_MC_EVENT_CALL
cbd.CallbackFunction = EventHandler;
MQCB(Hcon,MQOP_REGISTER,&cbd,MQHO_UNUSABLE_HOBJ,NULL,NULL,&CompCode,&Reason);
如果不使用这些常量,那么只会向事件处理程序发送连接级别事件。

有关 Options 字段的值的更多信息,请参阅 选项 (MQLONG)

多点广播事件格式

IBM MQ 多点广播异常包括回调函数的 Buffer 参数中返回的一些支持信息。 Buffer 指针指向指针数组,MQCBC.DataLength 字段指定数组的大小(字节数)。 数组的第一个元素始终指向事件的简短文本描述。 根据事件的类型,可能会提供更多参数。 下表列出了一些异常:
表 1. 多点广播事件代码描述
事件代码 描述 附加数据
MQMCEV_PACKET_LOSS 不可恢复的丢包 丢包数目
MQMCEV_HEARTBEAT_TIMEOUT 长时间没有脉动信号的控制分组 不适用
MQMCEV_VERSION_CONFLICT 接收更新协议版本包 不适用
MQMCEV_RELIABILITY 发送器和接收器的不同可靠性方式 不适用
MQMCEV_CLOSED_TRANS 主题传送由 1 个源关闭 不适用
MQMCEV_STREAM_ERROR 在流中检测到错误 不适用
MQMCEV_NEW_SOURCE 新源开始在主题上传输 源结构
MQMCEV_RECEIVE_QUEUE_TRIMMED 由于时间或空间到期而从 PacketQ 中移除的包 删除的包数目
MQMCEV_PACKET_LOSS_NACK_EXPIRE 由于 NACK 到期而导致的不可恢复丢包 丢包数目
MQMCEV_ACK_RETRIES_EXCEEDED 超出 max_ack_retries 后从历史记录中移除的包 已移除的包数目
MQMCEV_STREAM_SUSPEND_NACK 已针对该主题接受的流暂挂了 NACK 暂挂流标识

流暂挂的时间(毫秒)

MQMCEV_STREAM_RESUME_NACK 针对流暂挂后恢复的 NACK 流标识
MQMCEV_STREAM_EXPELLED 该主题接受的流由于驱逐请求已被拒绝 流标识
MQMCEV_FIRST_MESSAGE 来自源的第一条消息 消息编号
MQMCEV_LATE_JOIN_FAILURE 无法启动延迟连接会话 不适用
MQMCEV_MESSAGE_LOSS 不可恢复的消息丢失 丢失消息数
MQMCEV_SEND_PACKET_FAILURE 多点广播发送器无法发送多点广播信息包 不适用
MQMCEV_REPAIR_DELAY 多点广播接收器未收到未完成 NAK 的修复包 不适用
MQMCEV_MEMORY_ALERT_ON 接收器接收缓冲区即将填满 缓冲池利用率百分比
MQMCEV_MEMORY_ALERT_OFF 接收器接收缓冲区下降到正常水平 缓冲池利用率百分比
MQMCEV_NACK_ALERT_ON 接收器修复包请求率达到高水位标记 包中当前每秒的修复请求率
MQMCEV_NACK_ALERT_OFF 接收器修复包请求率下降到正常水平 包中当前每秒的修复请求率
MQMCEV_REPAIR_ALERT_ON 发送器修复包发送率达到高水位标记 不适用
MQMCEV_REPAIR_ALERT_OFF 发送器修复包发送率下降到正常状态 不适用
MQMCEV_SHM_DEST_UNUSABLE 检测到发送器主题目标使用的共享内存区域不可用 不适用
MQMCEV_SHM_PORT_UNUSABLE 检测到接收器实例使用的共享内存端口不可用 不适用
MQMCEV_CCT_GETTIME_FAILED 从“协调集群时间”获取时间失败 不适用
MQMCEV_DEST_INTERFACE_FAILURE 发送器主题目标使用的网络接口出现故障,备用网络接口不可用  
MQMCEV_DEST_INTERFACE_FAILOVER 发送器主题目标使用的网络接口出现故障,已成功完成到另一个接口的故障转移  
MQMCEV_PORT_INTERFACE-FAILURE 接收器 rmmPort 使用的网络接口出现故障,备用网络接口不可用(或者也出现故障) RMM 配置
MQMCEV_PORT_INTERFACE_FAILOVER 接收器 rmmPort 使用的网络接口出现故障,已成功完成到另一个接口的故障转移 RMM 配置