Error handling 无法模拟MQ原因代码2009
我试图模拟WebSphere MQ原因代码2009,以便在下面的JMS代码中处理,但无法获得它。相反,我得到了2059英镑。我所做的就是在进行连接调用时断开SVRCONN通道。如何在示例代码中获得2009。 我在再次建立连接和使用事务会话之前添加了睡眠时间。为了正确处理原因代码2009,队列管理器最终不会因为频繁的不成功连接尝试而崩溃,还可以做些什么。 请找到密码Error handling 无法模拟MQ原因代码2009,error-handling,jms,ibm-mq,Error Handling,Jms,Ibm Mq,我试图模拟WebSphere MQ原因代码2009,以便在下面的JMS代码中处理,但无法获得它。相反,我得到了2059英镑。我所做的就是在进行连接调用时断开SVRCONN通道。如何在示例代码中获得2009。 我在再次建立连接和使用事务会话之前添加了睡眠时间。为了正确处理原因代码2009,队列管理器最终不会因为频繁的不成功连接尝试而崩溃,还可以做些什么。 请找到密码 private static void connectToQmgr(MQQueueConnectionFactory cf) {
private static void connectToQmgr(MQQueueConnectionFactory cf) {
// TODO Auto-generated method stub
MQQueueConnection connection = null;
MQQueueSession session = null;
MQQueue queue = null;
MQQueueSender sender = null;
//While Statement to make sure multiple connection tries are made until connection establishes
while (connection == null){
try {
connection = (MQQueueConnection) cf.createConnection();
session = (MQQueueSession) connection.createQueueSession(true, Session.CLIENT_ACKNOWLEDGE);
queue = (MQQueue) session.createQueue("queue:///LQ");
sender = (MQQueueSender) session.createSender(queue);
//MQQueueReceiver receiver = (MQQueueReceiver) session.createReceiver(queue);
long uniqueNumber = System.currentTimeMillis() % 1000;
TextMessage message = session.createTextMessage("MQJMSTest "+ uniqueNumber);
// Start the connection
connection.start();
sender.send(message);
session.commit();
System.out.println("Sent message:\\n" + message);
// JMSMessage receivedMessage = (JMSMessage) receiver.receive(10000);
// System.out.println("\\nReceived message:\\n" + receivedMessage);
session.commit();
sender.close();
// receiver.close();
session.close();
connection.stop();
connection.close();
System.out.println("\\nSUCCESS\\n");
} catch (JMSException je) {
System.err.println("Caught JMSException");
// Check for linked exceptions in JMSException to catch MQException and Reason Codes
Throwable t = je;
while (t != null) {
// Write out the message that is applicable to all exceptions
System.err.println("Exception Msg: " + t.getMessage());
// Write out the exception stack trace
t.printStackTrace(System.err);
// Add on specific information depending on the type of exception
if (t instanceof JMSException) {
JMSException je1 = (JMSException) t;
System.err.println("JMS Error code: " + je1.getErrorCode());
if (t instanceof JmsExceptionDetail){
JmsExceptionDetail jed = (JmsExceptionDetail)je1;
System.err.println("JMS Explanation: " + jed.getExplanation());
System.err.println("JMS Explanation: " + jed.getUserAction());
}
} else if (t instanceof MQException) {
MQException mqe = (MQException) t;
System.err.println("WMQ Completion code: " + mqe.getCompCode());
System.err.println("WMQ Reason code: " + mqe.getReason());
//###################################################################################
//MQ Reason Code Error Handle here
//Currently Handling MQ Reason Code 2059 since unable to simulate 2009
//If connection handle exists make sure you close everything and add a wait interval and try a new connection again
if (mqe.getReason()== 2059){
System.out.println("Inside MQ Reson Code Handle");
if( connection != null){
try {
sender.close();
// receiver.close();
session.close();
connection.stop();
connection.close();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// Add Wait Interval for 5 sec
try {
Thread.sleep(5000);
System.out.println("Inside Thread Sleep for 5 sec");
//Try New connecting Again
connectToQmgr(cf);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//##################################################################################
} else if (t instanceof JmqiException){
JmqiException jmqie = (JmqiException)t;
System.err.println("WMQ Log Message: " + jmqie.getWmqLogMessage());
System.err.println("WMQ Explanation: " + jmqie.getWmqMsgExplanation());
System.err.println("WMQ Msg Summary: " + jmqie.getWmqMsgSummary());
System.err.println("WMQ Msg User Response: "
+ jmqie.getWmqMsgUserResponse());
System.err.println("WMQ Msg Severity: " + jmqie.getWmqMsgSeverity());
}
// Get the next cause
t = t.getCause();
}
}
}
}
2009
是MQRC\u连接断开的。您是否考虑过拔掉网络电缆或关闭连接通过的网络接口?在笔记本电脑上运行代码时,这很容易。对于服务器,您可以尝试通过SSH代理或其他可以关闭的虚拟接口路由连接
要回答问题的第二部分,请确保程序在重新连接尝试之间休眠几秒钟。或者,最好使用现代版本的WMQ客户端并使用自动重新连接选项。这将进行几次快速重试,然后在后续重试时稍微降低速度。您可以将通道的空闲连接超时设置为某个较小的值。创建连接,等待连接超时,然后尝试使用它。你将得到2009年。
wcn