activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sfali16 <>
Subject AMQ-3353 Durable subscribers on durable topics don't receive messages after network disconnect
Date Wed, 08 Jun 2011 15:19:00 GMT
         Issue Type: Bug 
          Components: Broker 
    Affects Versions: 5.5.0, 5.3.1 
         Environment: Windows & Linux 
JDK 1.6 
            Reporter: Syed Faraz Ali 

I've set up a durable topic with the default (persistent) delivery mode on
one machine that is publishing a simple text message every 5 seconds. I
created a durable subscriber that consumes messages published to the above
topic on another machine. I am using broker to broker communication between
the two machines. 
I start up the two programs on either machine and see the messages coming
through to the subscriber. If I then pull the network cable to disconnect
the network between the two machines, wait for a minute and then plug it
back in, my subscriber doesn't receive the messages any more. I can see from
the output that the publisher is still publishing them (Temporary topics,
non-durable queues all continue to sync up in our production environment, it
is only the durable topics that don't work after network reconnect) 

If I were to tweak a setting on the publisher's broker (that was introduced
only in 5.5.0), suppressDuplicateTopicSubscriptions=false, then the topics
work correctly after network reconnect. But this may have other unintended
consequences and I was hoping to get a better idea of: 
- is this a known issue ? if so, then are there any specific challenges that
have caused it not to be fixed? 
- are other people out there using durable topics and subscribers without a
failover option that have run into this problem? What have they done to work

Here is how my subscriber and publisher are set up: 
Topic Publisher (Machine 1) 
        publisherConnection = connFactory.createConnection(); 
        publisherConnection.setClientID( "ProducerCliID" ); 

        session = publisherConnection.createSession( true, -1 ); 
        Destination producerTopic = session.createTopic( TEST_TOPIC_NAME ); 
        producer = session.createProducer( (Topic)producerTopic ); 
    // On a timer, keep sending this out every 5 seconds 
                 String text = "HELLO " + count++; 
                TextMessage msg = session.createTextMessage( text ); 
                System.out.println( "Sending TextMessage = " + msg.getText()
                producer.send( msg ); 

Subscriber ( Machine 2): 
        Connection clientConnection = connFactory.createConnection(); 
        Session session = clientConnection.createSession( false,

        Destination topic = session.createTopic( topicName ); 
        MessageConsumer subscriber = session.createDurableSubscriber(
(Topic)topic, "subName" ); 

        TestMessageListener msgListener = new TestMessageListener( 1000 ); 
        subscriber.setMessageListener( msgListener ); 
         // TestMessageListener's onMessage method simply outputs the
        public void onMessage(Message message) 
            if ( message instanceof TextMessage ) 
                System.out.println( "Message received = " +
((TextMessage)message) ); 

I can provide the jars for you to run the program if need be. 

I created this as a JIRA issue first, but I realize that I may have posted
to the wrong forum (as it posted to the Dev forum). My apologies if this was
not the right procedure for seeking out help.

View this message in context:
Sent from the ActiveMQ - User mailing list archive at

View raw message