MQ JMS setClientReconnectOptions不';你不能按预期工作吗?

MQ JMS setClientReconnectOptions不';你不能按预期工作吗?,jms,ibm-mq,mq,Jms,Ibm Mq,Mq,我有一个简单的代码将两条消息放入一个队列。 1) 我用两台服务器设置connectionNameList 2) 这两台服务器是独立的,但具有相同的队列管理器和使用相同名称定义的队列,例如“QMgr”和“TEST.IN” 3) 我设置了setClientReconnectOptions(WMQConstants.WMQ_CLIENT_RECONNECT) 我希望当第一台服务器关闭时,它会将消息发送给第二台服务器。 我做的测试: a) 我发送第一条消息,发送者。发送(消息);它起作用了。 b) 睡眠

我有一个简单的代码将两条消息放入一个队列。
1) 我用两台服务器设置connectionNameList
2) 这两台服务器是独立的,但具有相同的队列管理器和使用相同名称定义的队列,例如“QMgr”和“TEST.IN”
3) 我设置了setClientReconnectOptions(WMQConstants.WMQ_CLIENT_RECONNECT)
我希望当第一台服务器关闭时,它会将消息发送给第二台服务器。

我做的测试:
a) 我发送第一条消息,发送者。发送(消息);它起作用了。
b) 睡眠30秒。
在此期间,我关闭了第一台服务器
c) 然后睡眠完成,尝试发送第二条消息,但无法立即发送

此外,我尝试了更多,我确实尝试了第二条消息的{}catch{},在catch{}中,我尝试发送sender.send(message),但仍然失败

你知道为什么和我想象的不一样吗。我将非常感谢你的答复

public static void main(String[] args) throws Exception
{
    MQQueueConnectionFactory cf = new MQQueueConnectionFactory();
    cf.setConnectionNameList("10.230.34.191(1418),10.230.34.169(1418)");

    cf.setQueueManager("QMgr");
    cf.setTransportType(WMQConstants.WMQ_CM_CLIENT);
    cf.setClientReconnectOptions(WMQConstants.WMQ_CLIENT_RECONNECT);
    cf.setClientReconnectTimeout(600);

    System.out.println("connect list " + cf.getConnectionNameList());

    MQQueueConnection connection = (MQQueueConnection) cf
            .createQueueConnection("mqm", "passwd");
    MQQueueSession session = (MQQueueSession) connection.createQueueSession(false,
            Session.AUTO_ACKNOWLEDGE);
    MQQueue queue = (MQQueue) session.createQueue("queue:///TEST.IN");
    MQQueueSender sender = (MQQueueSender) session.createSender(queue);

    long uniqueNumber = System.currentTimeMillis() % 1000;
    JMSTextMessage message = (JMSTextMessage) session.createTextMessage("SimplePTP "
            + uniqueNumber);

    // Start the connection
    connection.start();

    sender.send(message);
    System.out.println("Sent message:\\n" + message);

    System.out.println("sleep 30 seconds");
    Thread.sleep(30000);
    uniqueNumber = System.currentTimeMillis() % 1000;
    message = (JMSTextMessage) session.createTextMessage("SimplePTP " + uniqueNumber);
    sender.send(message);

    sender.close();
    session.close();
    connection.close();

    System.out.println("\\nSUCCESS\\n");
  }

这是最简单的测试用例,应该可以工作。您是如何关闭第一个队列管理器的?您是否使用了
-r
选项将其关闭。请记住,如果没有
-r
选项,当队列管理器以
endmqm
命令结束时,客户端将不会重新连接

endmqm -r <qm name>

谢谢我想如果我用“-r”关机,它实际上会起作用。正如IBM文档所指出的,故障切换不适用于任何关机情况。所以这不是问题。
conn.setExceptionListener(new ExceptionListener() {

  public void onException(JMSException e) {
    System.out.print(e);
  }
});