我正在使用 mo01 java 支持包从 SYSTEM.ADMIN.CHANNEL.EVENT Queue 读取事件消息。
以下是代码链接:
我可以从通道事件队列中消耗的 PCF 消息中读取所有参数名称/值,但以下参数除外,
原因限定词 指定限定原因码的标识符。 标识符 MQIACF_REASON_QUALIFIER。 数据类型 MQCFIN。 价值观 以下之一: MQRQ_CHANNEL_STOPPED_OK 通道已以零返回代码或警告返回代码关闭。 MQRQ_CHANNEL_STOPPED_ERROR 通道已关闭,但报错且通道未处于停止或重试状态。 MQRQ_CHANNEL_STOPPED_RETRY 通道已关闭,处于重试状态。 MQRQ_CHANNEL_STOPPED_DISABLED 通道已关闭,处于停止状态。 回来 总是。
下面是部分代码,
Map reasonCodes = new HashMap(); /** MQ 命令名称和值的映射。*/ 映射命令 = new HashMap(); /** MQ 字符串名称和值的映射。*/ 映射 stringNames = new HashMap(); 私有字符串 getStringName(int stringInt) { return (String)stringNames.get(new Integer(stringInt)); } /** * 将常量整数转换为其 MQ 命令名称。 * @param stringInt MQ 整数。 * @return 由常量整数表示的 MQ 命令名称。 */ 私有字符串 getCommandName(int stringInt) { return (String)commands.get(new Integer(stringInt)); } // 下面的方法从类中检索 int 代码的字符串值并存储在 HashMap 中 公共无效 setupMaps() { setupReasonNameSub("com.ibm.mq.pcf.CMQC", "MQRC", reasonCodes); setupReasonNameSub("com.ibm.mq.pcf.CMQCFC", "MQRC", reasonCodes); setupReasonNameSub("com.ibm.mq.pcf.CMQCFC", "MQCMD", commands); setupReasonNameSub("com.ibm.mq.pcf.CMQC", "MQCA", stringNames); setupReasonNameSub("com.ibm.mq.pcf.CMQCFC", "MQCA", stringNames); setupReasonNameSub("com.ibm.mq.pcf.CMQC", "MQIA", stringNames); setupReasonNameSub("com.ibm.mq.pcf.CMQC", "MQRQ", reasonCodes); } 无效读取PCFMessage(PCFMessage pcfMessage){ 枚举 pcfEnum = pcfMessage.getParameters(); 标准输出 = 标准输出 + "" + getReasonName(pcfMessage.getReason()) + "\n"; 而 (pcfEnum.hasMoreElements()) { 字符串参数名称; PCFParameter elt = (PCFParameter)pcfEnum.nextElement(); 参数名 = getStringName(elt.getParameter()); 标准输出 = 标准输出 + ""; if (elt.getType() == CMQCFC.MQCFT_STRING_LIST) { 字符串字符串[] = (String[])elt.getValue(); for (int i = 0; i " + strings[i] + "\n"; } } 别的 标准输出 = 标准输出 + elt.getValue().toString(); 标准输出 = 标准输出 + "\n"; } System.out.println(stdout); }输出: MQRC_CHANNEL_STOPPED QMGR1 CHL到CHLA SYSTEM.CLUSTER.TRANSMIT.QUEUE 172.21.33.123 9 0 0 0 CHL到CHLA
如果一个频道被停止,我想知道它是因问题或正常而停止的确切原因。这个参数告诉我们频道停止的正确原因。
知道为什么这个参数不可检索吗?