我的下面是代码适用于MQ6,但对于MQ7,它给出异常
'package javaapplication1;
import java.io.*;
import java.net.*;
import java.util.*;
import java.util.TimerTask;
import com.ibm.mq.MQEnvironment;
import com.ibm.mq.MQException;
import com.ibm.mq.MQQueue;
import com.ibm.mq.MQQueueManager;
import com.ibm.mq.constants.CMQC;
class Connectivity
{
public static void main(String args[]) throws MQException
{
String qManager="";
int port_num=0;
int openOptions = CMQC.MQOO_FAIL_IF_QUIESCING + CMQC.MQOO_INPUT_SHARED;
MQEnvironment.hostname = "Host_name";
MQEnvironment.port = port_num;
MQEnvironment.channel = "Chn_name";
System.out.println("Connecting to queue manager: " + qManager);
Hashtable props = new Hashtable();
// Change the host name to your host name. Leave it as it is if
// queue manager is on the same machine
props.put(CMQC.HOST_NAME_PROPERTY, "Host_name");
props.put(CMQC.PORT_PROPERTY, port_num);
props.put(CMQC.CHANNEL_PROPERTY, "Chn_Name");
MQQueueManager qMgr = new MQQueueManager(qManager, props);
//MQQueueManager qMgr = new MQQueueManager("SW1_QM");
MQQueue destQueue = qMgr.accessQueue("Q_Name", openOptions);
System.out.println("E_RETRY size:" + destQueue.getCurrentDepth());
destQueue.close();
qMgr.disconnect();
}
}'
我在线上得到例外
' System.out.println(" E_RETRY size:" + destQueue.getCurrentDepth());'
,异常消息是
'MQJE001: Completion Code 1, Reason 2068
Exception in thread "main" com.ibm.mq.MQException: MQJE001: Completion Code 1, Reason 2068
at com.ibm.mq.MQManagedObject.inquire(MQManagedObject.java:257)
at com.ibm.mq.MQManagedObject.getInt(MQManagedObject.java:428)
at com.ibm.mq.MQQueue.getCurrentDepth(MQQueue.java:1478)
at javaapplication1.Connectivity.main(Connectivity.java:36)
Java Result: 1'
请帮帮我......
答案 0 :(得分:1)
您的打开选项不包含MQOO_INQUIRE
,这是获取队列深度所必需的。我期望MQRC 2038,因为没有指定MQOO_INQUIRE选项。
还不确定为什么要初始化MQEnvironment,并且要将属性哈希表传递给MQQueueManager构造函数。
无论如何,这里是获取本地队列队列深度的示例代码。
public static void getQueueDepth()
{
String qManager="QM1";
int port_num=1414;
int openOptions = CMQC.MQOO_FAIL_IF_QUIESCING + CMQC.MQOO_INPUT_SHARED + CMQC.MQOO_INQUIRE;
try {
Hashtable props = new Hashtable();
props.put(CMQC.HOST_NAME_PROPERTY, "localhost");
props.put(CMQC.PORT_PROPERTY, port_num);
props.put(CMQC.CHANNEL_PROPERTY, "SYSTEM.DEF.SVRCONN");
MQQueueManager qMgr = new MQQueueManager(qManager, props);
MQQueue destQueue = qMgr.accessQueue("SYSTEM.DEFAULT.LOCAL.QUEUE", openOptions);
System.out.println("E_RETRY size:" + destQueue.getCurrentDepth());
destQueue.close();
qMgr.disconnect();
}catch(MQException mqe){
System.out.println(mqe);
}
}
答案 1 :(得分:0)
v6和v7队列管理器之间的队列属性是否可能不同? documentation for the error message表示解析到队列的远程实例的群集队列可能会发生这种情况。
您是否确认destQueue实际上是一个有效的队列?