2016-04-23 65 views
2

有没有办法编写PCF程序来获取处于“正在运行”状态的群集发送者/接收者通道的通道状态?
我有这样的东西,只给我一个频道的频道状态!如何编写PCF命令以获取条件的通道状态?

// send the request and collect the responses 
    String checkStatus=""; 
    String channelName =""; 
// build a request 
    request = new PCFMessage(CMQCFC.MQCMD_INQUIRE_CHANNEL_STATUS); 
// add a parameter designating the name of the channel for which status is requested 
    request.addParameter(CMQCFC.MQCACH_CHANNEL_NAME, "TO.*"); 
// add a parameter designating the instance type (current) desired 
    request.addParameter(CMQCFC.MQIACH_CHANNEL_INSTANCE_TYPE, CMQC.MQOT_CURRENT_CHANNEL); 

    responses = agent.send(request); 
    for (int j = 0; j < responses.length; j++) { 
     // get the channel name and trim the spaces 
     String temp =""; 
     temp = responses[j].getStringParameterValue(CMQCFC.MQCACH_CHANNEL_NAME); 
     channelName = temp.trim(); 

     int chlStatus = responses[j].getIntParameterValue(CMQCFC.MQIACH_CHANNEL_STATUS); 
     //System.out.println("channel status: " + chlStatus); 
     String[] chStatusText = { 
      "", "MQCHS_BINDING", "MQCHS_STARTING", "MQCHS_RUNNING", 
       "MQCHS_STOPPING", "MQCHS_RETRYING", "MQCHS_STOPPED", 
       "MQCHS_REQUESTING", "MQCHS_PAUSED", 
       "", "", "", "", "MQCHS_INITIALIZING" 
     }; 
     checkStatus = chStatusText[chlStatus]; 
     //System.out.println("channel status: " + checkStatus); 
    } 
    System.out.println("chl: " + channelName + " STATUS: " + checkStatus + ")"); 

上面的代码给出了只有一个通道而不是所有通道的通道状态。这里有什么问题?

+0

您是否在问如何将您返回的整数转换为运行(或其他状态),或者您在问如何从通道状态记录中获取其他信息以及运行状态? –

+0

基本上我想写一个对应于下面的runmqsc dis chs(TO。*)的PCF命令,其中(STATUS eq RUNNING) – sijo0703

回答

3

代码中的PCF部分看起来不错,但打印出来的结果是错误的代码。

responses = agent.send(request); 
for (int j = 0; j < responses.length; j++) { 
    : 
    : 
    checkStatus = chStatusText[chlStatus]; 
} 
System.out.println("chl: " + channelName + " STATUS: " + checkStatus + ")"); 

你有一个for循环兜兜所有的答复,但随后的println是for循环外部,所以只打印出的最终响应的结果。

+1

谢谢!我想我需要更多的睡眠:) – sijo0703

+0

我有2个频道。它适用于连接到队列管理器的服务器连接通道。对于其他通道,失败的原因如下:AMQ9502:通道类型不适合请求的操作。 说明: 请求的操作无法在通道'remote.local'上执行。某些 操作仅对某些通道类型有效。此频道是 'RECEIVER'频道类型。例如,您只能从发起端ping通或触发通道 。 – itsraja

+0

你已经在关于显示频道的问题上附加了你的评论。你是说当你试图展示一个频道时,你会得到这个错误?你所说的只是“它有效......”你不会说“它”是什么。建议你可能想开始一个新问题,而不是在这个问题的最后添加标签,如果你正在做一些不同的事情? –

1

去抢我的开源项目MQ Channel Monitor。下载源代码并查看'PCFChlStatus.java'文件。有一个名为getMCAStatus()的方法,它基本上就是你所追求的。

相关问题