gpt4 book ai didi

jms - MQ JMS setClientReconnectOptions 没有按预期工作?

转载 作者:行者123 更新时间:2023-12-04 00:51:18 34 4
gpt4 key购买 nike

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

我做的测试:
a) 我发送第一条消息,sender.send(message);它奏效了。
b) 睡 30 秒。
在此期间,我关闭了第一台服务器
c) 然后 sleep done,尝试发送第二条消息,但未能立即发送

此外,我尝试了更多,我尝试{}捕获{}第二条消息,在捕获{}中,我尝试发送。发送(消息),它仍然失败。

知道为什么它与我的预期不同。非常感谢您的回复。

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 选项但它仍然不起作用,那么我的建议是尝试以下操作:

设置异常监听器以了解重新连接时发生的情况。当连接中断并开始重新连接尝试时将调用异常监听器,直到重新连接成功或失败。异常监听器示例代码如下所示:

conn.setExceptionListener(new ExceptionListener() {

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

关于jms - MQ JMS setClientReconnectOptions 没有按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14420667/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com