Ideal way to set up a JMS connection so that it automatically connects

I am currently programming a messaging service for long-term subscribers (this may turn out to be short-lived, we are still discussing this) and I was looking for some suggestions on how to handle the scenario when our server is temporarily shut down for any reason and we should automatically renew the subscription to this topic. Here is an example code of how it connects:

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();
    }
}
+5
source share
2 answers

? , , ( "fluff" keepalive ) - , keepalive, .

UDP, JMS ( ), , UDP , jgroups / .

0

implement javax.jmsExceptionListener.

JMS API, , - .

Connection, , connection.setExceptionListener(myListener). . Javadoc Connection.

+3

All Articles