我正在使用 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
如果一个频道被停止,我想知道它是因问题或正常而停止的确切原因。这个参数告诉我们频道停止的正确原因。
知道为什么这个参数不可检索吗?