activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alin (JIRA)" <j...@apache.org>
Subject [jira] [Comment Edited] (AMQ-3353) Durable subscribers on durable topics don't receive messages after network disconnect
Date Thu, 28 Mar 2013 14:13:55 GMT

    [ https://issues.apache.org/jira/browse/AMQ-3353?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13616202#comment-13616202
] 

Alin edited comment on AMQ-3353 at 3/28/13 2:12 PM:
----------------------------------------------------

I'm seeing the exact same behavior when using a javax.jms.MessageConsumer.
Whenever I'm powering off or unplugging the master broker machine,The slave broker will take
over the master role but the  consumers will not reconnect to the new master broker.
There are no logged errors or other type of messages on the consumer side. The consumer behaves
like it is still connected to the previous master instance and it is waiting for the messages
to arrive in the queue.  

I was thinking of implementing a thread on my consumer side which will query the JMS connection
from time to time, hopefully this way the fail-over mechanism will kick in. Although I'm not
convinced that this is the right approach.

The broker URL I'm using is: 
failover:(tcp://server1:61616?keepAlive=true&wireFormat.maxInactivityDuration=0,tcp://server2:61616?keepAlive=true&wireFormat.maxInactivityDuration=0)?randomize=false&updateURIsSupported=false&jms.prefetchPolicy.all=1


The ActiveMQ version I'm using is 5.8.0
The client side libraries were 5.4.2, 5.7.0 and 5.8.0

                
      was (Author: alin_aron_oana@yahoo.ca):
    I'm seeing the exact same behavior when using a javax.jms.MessageConsumer.
Whenever I'm powering off or unplugging the master broker machine,The slave broker will take
over the master role but the  consumers will not reconnect to the new master broker.
There are no logged errors or other type of messages on the consumer side. The consumer behaves
like it is still connected to the previous master instance and it is waiting for the messages
to arrive in the queue.  

I was thinking of implementing a thread on my consumer side which will query the JMS connection
from time to time, hopefully this way the fail-over mechanism will kick in. Although I'm not
convinced that this is the right approach.

The broker URL I'm using is: 
failover:(tcp://server1:61616?keepAlive=true&wireFormat.maxInactivityDuration=0,tcp://server2:61616?keepAlive=true&wireFormat.maxInactivityDuration=0)?randomize=false&updateURIsSupported=false&jms.prefetchPolicy.all=1


The ActiveMQ version I'm using is 5.8.0
The client side libraries are 5.4.2

                  
> Durable subscribers on durable topics don't receive messages after network disconnect
> -------------------------------------------------------------------------------------
>
>                 Key: AMQ-3353
>                 URL: https://issues.apache.org/jira/browse/AMQ-3353
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 5.3.1, 5.5.0
>         Environment: Windows & Linux
> JDK 1.6
>            Reporter: Syed Faraz Ali
>            Assignee: Gary Tully
>             Fix For: 5.6.0
>
>         Attachments: DurableSubscriberWithNetworkDisconnectTest.java, DurableSubscriberWithNetworkDisconnectTest.java,
DurableSubscriberWithNetworkDisconnectTest.java, embedded1.xml, embedded2.xml, example.tar.gz,
instructions.txt, standalone1.xml, standalone2.xml, TEST-org.apache.activemq.usecases.DurableSubscriberWithNetworkDisconnectTest.xml,
TEST-org.apache.activemq.usecases.DurableSubscriberWithNetworkDisconnectTest.xml, test-results.ods
>
>
> 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 around?
> Here is how my subscriber and publisher are set up:
> Topic Publisher (Machine 1)
>         publisherConnection = connFactory.createConnection();
>         publisherConnection.setClientID( "ProducerCliID" );
>         publisherConnection.start();
>         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 );
>                 session.commit();
> Subscriber ( Machine 2):
>         Connection clientConnection = connFactory.createConnection();
>         clientConnection.setClientID("cliID");
>         clientConnection.start();
>         Session session = clientConnection.createSession( false, Session.AUTO_ACKNOWLEDGE
);
>         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 message:
>         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.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message