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