【问题标题】:How to write PCF command to get channel status with a condition?如何编写 PCF 命令以获取具有条件的通道状态?
【发布时间】:2016-08-16 18:06:25
【问题描述】:

有没有办法编写 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  + ")"); 

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

【问题讨论】:

  • 您是在问如何将您获得的整数转换回 Running(或其他状态),或者您是在问如何从通道状态记录以及 Running 状态中获取其他信息?跨度>
  • 基本上我想写一个PCF命令对应下面的runmqsc dis chs(TO.*) where(STATUS eq RUNNING)

标签: java ibm-mq pcf


【解决方案1】:

您代码的 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 循环之外,因此仅打印出最终响应的结果。

【讨论】:

  • 谢谢!我想我需要更多的睡眠:)
  • 我有 2 个频道。它适用于我连接到队列管理器的服务器连接通道。对于其他通道,它失败为 AMQ9502:通道类型不适合请求的操作。解释:请求的操作无法在频道“remote.local”上执行。某些操作仅对某些通道类型有效。该频道是“RECEIVER”频道类型。例如,您只能从发起端 ping 或触发通道。
  • 您已附加您对有关显示频道的问题的评论。您是说当您尝试显示频道时会出现此错误?你所说的只是“它有效......”你没有说“它”是什么。如果您正在做一些不同的事情,建议您可能想开始一个新问题而不是标记到这个问题的末尾?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多