多点广播异常报告
使用此信息可了解 "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 字段指定数组的大小(字节数)。 数组的第一个元素始终指向事件的简短文本描述。 根据事件的类型,可能会提供更多参数。 下表列出了一些异常:| 事件代码 | 描述 | 附加数据 |
|---|---|---|
| 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 配置 |