Tôi hiện đang lập chương trình dịch vụ nhắn tin cho đăng ký bền (có thể kết thúc là không bền, chúng tôi vẫn đang thảo luận) và tôi đang tìm một số gợi ý về cách xử lý một tình huống mà máy chủ của chúng tôi tạm thời ngừng hoạt động vì bất kỳ lý do gì và chúng tôi cần phải tự động đăng ký lại chủ đề đó. Dưới đây là mã mẫu về cách kết nối:Cách lý tưởng để thiết lập kết nối JMS để nó tự động kết nối lại
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();
}
}
Nó không phải là ngay lập tức nếu đó là những gì bạn đang yêu cầu. Có anyway này có thể được thực hiện với một khối try/catch? – Icebreaker
chỉ khi kết nối cơ bản ném một số loại ngoại lệ khi bị cắt. tôi không thể nói với bạn mà không cố gắng. – radai