已解决
找到答案希望它可以帮助其他人解决同样的问题。
我为来自MQ队列的读取消息编写了一个简单的方法 在循环中,我尝试读取消息(使用waitInterval)。从队列中成功读取消息后,将返回2195返回码。我该如何解决这个问题?
这是我的代码的简化版本,没有异常处理或任何其他事情。
public static void main(String args[]) {
MQException.logExclude(MQException.MQRC_NO_MSG_AVAILABLE);
MQException.logExclude(MQException.MQRC_UNEXPECTED_ERROR);
MQException.log = null;
while (true) {
incomeDeployMsg = readFromQueue(waitReadInterval);
System.out.println(dateFormater.format(new Date()) + " Income msg");
}
}
public String readFromQueue(int waitInterval) throws MQException{
MQMessage message = new MQMessage();
try {
if (m_inQueue == null || !m_inQueue.isOpen())
m_inQueue = m_mqQmgr.accessQueue(m_inQueueName, CMQC.MQOO_INQUIRE + CMQC.MQOO_FAIL_IF_QUIESCING + CMQC.MQOO_INPUT_SHARED);
message.messageId = CMQC.MQMI_NONE;
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options = CMQC.MQGMO_WAIT;
gmo.waitInterval = waitInterval;
m_inQueue.get(message, gmo);
return message.readStringOfCharLength(message.getMessageLength());
} catch (MQException mqe) {
throw mqe;
} finally {
message.clearMessage();
}
}
结果中的第一行不是来自我的代码!我认为是IBM的类在标准输出上打印出来。我该如何解决错误?
结果:
MQJE001:完成代码'2',原因'2195' 2013-05-15 11:44:27收入消息
答案 0 :(得分:2)
使用MQException.logExclude()注释掉2行,然后使用:
MQException.log = null;
答案 1 :(得分:0)
如果您不想这样,那么在catch块中,检查异常的原因代码是否为2195,并相应地编写代码。
像:
catch (MQException mqe) {
if(mqe.reasonCode==2195)
{
/* DO NOTHING FOR THIS ERROR */
}
else
{
throw mqe;
}
}
答案 2 :(得分:0)
我遇到了问题,即使我设置了
The following object is masked from ‘package:stats’:
filter
The following objects are masked from ‘package:base’:
intersect, setdiff, setequal, union
它仍打印出" MQJE001:完成代码' 2',原因''' "
最终我发现,该行是从MQDataException打印的。
添加以下行以解决问题。
MQException.log = null;