ऑटो रीकनेक्ट करता है। मैं वर्तमान में टिकाऊ सब्सक्रिप्शन के लिए एक मैसेंजर सेवा प्रोग्रामिंग कर रहा हूं (यह तब तक टिकाऊ हो सकता है जब हम अभी भी उस पर चर्चा कर रहे हैं) और मैं कुछ सुझावों को ढूंढ रहा था कि कैसे एक परिदृश्य को संभालें जहां हमारा सर्वर किसी भी कारण से अस्थायी रूप से नीचे चला जाता है और हमें स्वचालित रूप से विषय पर पुनः सदस्यता लेने की आवश्यकता होती है। यहां नमूना कोड है कि यह कैसे कनेक्ट करता है:एक जेएमएस कनेक्शन स्थापित करने का आदर्श तरीका है, इसलिए यह
public void DurableChatter(String broker, String username, String password)
{
javax.jms.MessageProducer publisher = null;
javax.jms.MessageConsumer subscriber = null;
javax.jms.Topic topic = null;
//Create a connection:
try{
javax.jms.ConnectionFactory factory;
factory = (new progress.message.jclient.ConnectionFactory (broker));
connection = factory.createConnection (username, password);
//Durable Subscriptions are indexed by username, clientID and subscription name
//It is a good proactice to set the clientID:
connection.setClientID(CLIENT_ID);
pubSession = connection.createSession(false,javax.jms.Session.AUTO_ACKNOWLEDGE);
subSession = connection.createSession(false,javax.jms.Session.AUTO_ACKNOWLEDGE);
}
catch (javax.jms.JMSException jmse){
System.err.println ("Error: Cannot connect to Broker - " + broker);
jmse.printStackTrace();
System.exit(1);
}
//Create Publisher and Durable Subscriber:
try{
topic = pubSession.createTopic(APP_TOPIC);
subscriber = subSession.createDurableSubscriber(topic, "SampleSubscription");
subscriber.setMessageListener(this);
publisher = pubSession.createProducer(topic);
connection.start();
}
catch (javax.jms.JMSException jmse){
System.out.println("Error: connection not started.");
jmse.printStackTrace();
System.exit(1);
}
//Wait for user input
try
{
System.out.println("Enter text to send as message and press enter.");
java.io.BufferedReader stdin =
new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
while (true)
{
String s = stdin.readLine();
if(s == null){
exit();
}
else if (s.length()>0)
{
try
{
javax.jms.TextMessage msg = pubSession.createTextMessage();
msg.setText(username + ": " + s);
//Publish the message persistantly:
publisher.send(
msg, //message
javax.jms.DeliveryMode.PERSISTENT, //publish persistantly
javax.jms.Message.DEFAULT_PRIORITY,//priority
MESSAGE_LIFESPAN); //Time to Live
}
catch (javax.jms.JMSException jmse){
System.err.println("Error publishing message:" + jmse.getMessage());
}
}
}
}
catch (java.io.IOException ioe)
{
ioe.printStackTrace();
}
}
यदि आप यही पूछ रहे हैं तो यह तत्काल नहीं होना चाहिए। क्या वैसे भी यह कोशिश/पकड़ ब्लॉक के साथ किया जा सकता है? – Icebreaker
केवल तभी अंतर्निहित कनेक्शन कुछ अलग अपवाद फेंकता है जब इसे तोड़ दिया जाता है। मैं कोशिश किए बिना आपको नहीं बता सका। – radai