activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kevin Yaussy (JIRA)" <j...@apache.org>
Subject [jira] Created: (AMQ-687) Multiple durable topics don't work with network of brokers
Date Mon, 10 Apr 2006 16:13:51 GMT
Multiple durable topics don't work with network of brokers
----------------------------------------------------------

         Key: AMQ-687
         URL: https://issues.apache.org/activemq/browse/AMQ-687
     Project: ActiveMQ
        Type: Bug

  Components: Broker  
    Versions: 4.0 RC 2    
 Environment: AMQ RC2, Solaris 8 / 10, JDK 1.5
    Reporter: Kevin Yaussy
    Priority: Critical


There is a problem with a network of brokers with regards to a single consumer subscribing
to multiple durable topics.  

To recreate the issue, I changed examples/ConsumerTool.java to subscribe to two durable topics,
with the createDurableSubscriber calls changed to look like this:
                consumer = session.createDurableSubscriber(topic1, topic1.getTopicName() );
                consumer2 = session.createDurableSubscriber( topic2, topic2.getTopicName()
);
This ensures that the name of the durable subscriptions are unique, rather than using the
"consumerName" as the base example code does.

The problem is with any remote brokers: it appears that the broker-to-broker code for durable
subscriptions does not *uniquely* set the subscription name for multiple durable subscriptions
to different topics.  Here is the message and exception information from the remote broker:

<INFO> <org.apache.activemq.broker.AbstractConnection.Service> < Mon 2006/04/10
10:50:52:660 > <org.apache.activemq.broker.AbstractConnection.se
rviceException> <Thread[tcp://sbtmdgca/170.137.15.64:61618,5,main]> Async error occurred:
javax.jms.JMSException: Durable consumer is in use for
 client: NC_ProdDN3AsbtmdgcasbtmdgcAMQDN_inboundProdDN3Bsbtgc0bsbtgc0AMQDN and subscriptionName:
ProdDN3Bsbtgc0bsbtgc0AMQDN
<INFO> Stack Trace follows:
javax.jms.JMSException: Durable consumer is in use for client: NC_ProdDN3AsbtmdgcasbtmdgcAMQDN_inboundProdDN3Bsbtgc0bsbtgc0AMQDN
and subscriptio
nName: ProdDN3Bsbtgc0bsbtgc0AMQDN
        at org.apache.activemq.broker.region.TopicRegion.addConsumer(TopicRegion.java:81)
        at org.apache.activemq.broker.region.RegionBroker.addConsumer(RegionBroker.java:276)
        at org.apache.activemq.broker.BrokerFilter.addConsumer(BrokerFilter.java:69)
        at org.apache.activemq.advisory.AdvisoryBroker.addConsumer(AdvisoryBroker.java:75)
        at org.apache.activemq.broker.BrokerFilter.addConsumer(BrokerFilter.java:69)
        at org.apache.activemq.broker.MutableBrokerFilter.addConsumer(MutableBrokerFilter.java:81)
        at org.apache.activemq.broker.AbstractConnection.processAddConsumer(AbstractConnection.java:422)
        at org.apache.activemq.command.ConsumerInfo.visit(ConsumerInfo.java:291)
        at org.apache.activemq.broker.AbstractConnection.service(AbstractConnection.java:196)
        at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:62)
        at org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:88)
        at org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:70)
        at org.apache.activemq.transport.vm.VMTransport.oneway(VMTransport.java:75)
        at org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:44)
        at org.apache.activemq.transport.ResponseCorrelator.oneway(ResponseCorrelator.java:55)
        at org.apache.activemq.network.DemandForwardingBridgeSupport.addSubscription(DemandForwardingBridgeSupport.java:344)
        at org.apache.activemq.network.DemandForwardingBridgeSupport.serviceRemoteConsumerAdvisory(DemandForwardingBridgeSupport.java:324)
        at org.apache.activemq.network.DemandForwardingBridgeSupport.serviceRemoteCommand(DemandForwardingBridgeSupport.java:274)
        at org.apache.activemq.network.DemandForwardingBridgeSupport$2.onCommand(DemandForwardingBridgeSupport.java:120)
        at org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:88)
        at org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:70)
        at org.apache.activemq.transport.failover.FailoverTransport$1.onCommand(FailoverTransport.java:103)
        at org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:114)
        at org.apache.activemq.transport.InactivityMonitor.onCommand(InactivityMonitor.java:122)
        at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:87)
        at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:139)
        at java.lang.Thread.run(Thread.java:595)


You can see that the "subscriptionName" used from the originating broker is the brokerName.
 This will never handle multiple durable subscriptions (different topics) from the same consumer.

Perhaps in addition to the brokerName, the original topic name could be used?  Or, just the
topic name, since clientId is supposed to make it unique anyway.


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   https://issues.apache.org/activemq/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


Mime
View raw message