2 つのメッセージをキューに入れる簡単なコードがあります。
1) 2 つのサーバーで connectionNameList を設定しました。
2) これら 2 つのサーバーは独立していますが、「QMgr」や「TEST.IN」など、同じ名前で定義された同じキュー マネージャーとキューがあります。
3) setClientReconnectOptions(WMQConstants.WMQ_CLIENT_RECONNECT);
最初のサーバーがダウンしたときに、メッセージが 2 番目のサーバーに送信されることを願っています。
私が行ったテスト:
a) 最初のメッセージ、sender.send(message); を送信します。出来た。
b) 30 秒間スリープします。
この間、最初のサーバーをシャットダウンしました
c) その後、スリープ状態になり、2 番目のメッセージを送信しようとしましたが、すぐに送信できませんでした
さらに、さらに試してみました。2 番目のメッセージに対して {} 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");
}