[ https://issues.apache.org/activemq/browse/AMQ-687?page=all ]
Rob Davies reassigned AMQ-687:
------------------------------
Assign To: Rob Davies
> 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
> Assignee: Rob Davies
> 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