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

Fran Vázquez commented on AMQ-1573:
-----------------------------------

A simple test to reproduce this issue (just execute several times):


import java.net.URI;

import javax.jms.BytesMessage;
import javax.jms.Destination;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.broker.BrokerService;
import org.apache.activemq.broker.TransportConnector;
import org.apache.activemq.command.ActiveMQMessage;
import org.apache.activemq.command.ActiveMQTopic;

public class ActiveMQSubscriptionTest {
        

        /**
         * @param args
         */
        public static void main(String[] args) {
                try {
                        URI discoveryUri = new 
URI("multicast://default?group=onegroup");
                        URI localPort = new URI("tcp://localhost:0");

                        BrokerService broker = new BrokerService();
                        broker.setUseJmx(false);
                        broker.setPersistent(false);

                        TransportConnector connector = 
broker.addConnector(localPort);
                        connector.setDiscoveryUri(discoveryUri);
                        broker.addNetworkConnector(discoveryUri);
                        broker.start();

                         
                        ActiveMQConnectionFactory connectionFactory = new 
ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
                                        ActiveMQConnection.DEFAULT_PASSWORD, 
"vm://"+ broker.getBrokerName()); 

                        ActiveMQConnection connection = 
(ActiveMQConnection)connectionFactory.createConnection();
                        connection.start();

                        Session session = connection.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
                        MessageConsumer consumer = 
session.createConsumer(session.createTopic("ActiveMQ.Advisory.>"));
                        TestListener listener= new 
TestListener("ActiveMQ.Advisory.>");
                        consumer.setMessageListener(listener);
                        
                        Destination d= new ActiveMQTopic("one.>");
                        consumer = session.createConsumer(d);
                        listener = new TestListener("one.>");
                        consumer.setMessageListener(listener);
                        
                        d= new ActiveMQTopic("one.two.>");
                        consumer = session.createConsumer(d);
                        listener = new TestListener("one.two.>");
                        consumer.setMessageListener(listener);
                        
                        d= new ActiveMQTopic("one.two.three");
                        consumer = session.createConsumer(d);
                        listener = new TestListener("one.two.three");
                        consumer.setMessageListener(listener);
                        
                        d= new ActiveMQTopic("one.four.five");
                        MessageProducer producer = session.createProducer(d);
                        TextMessage msg = session.createTextMessage();
                        
                        int i = 0;
                        String ID = 
connection.getConnectionInfo().getClientId();
                        while(true){
                                synchronized(session){
                                        session.wait(10000);
                                        msg.setText(ID +" ----------- " + i +" 
-----------" );
                                        producer.send(msg);
                                        i++;
                                }
                        }
                }catch(Exception e){
                        System.out.println(e);
                }
        }
        
}
        
class TestListener implements MessageListener {

        private String topic;

        public TestListener(String topic)
        {
                this.topic = topic;
        }

        public void onMessage(javax.jms.Message message) {
                try{

                        System.out.println(topic + " Message : " + 
message.getJMSDestination().toString());
                        String content = "Not known";
                        byte[] body;
                        if(message instanceof BytesMessage)
                        {
                                body = new 
byte[(int)((BytesMessage)message).getBodyLength()];
                                ((BytesMessage)message).readBytes(body);
                                content = new String(body);

                        }
                        else if (message instanceof TextMessage)
                        {
                                content = ((TextMessage)message).getText();
                        }
                        else if (message instanceof ActiveMQMessage){
                                content = "";
                        }
                        System.out.println(content);
                }catch(Exception e){
                        System.out.println(e);
                }
        }
}



> ConduitBridge merges destinations x.a and x.>, resulting in loss of 
> subscription
> --------------------------------------------------------------------------------
>
>                 Key: AMQ-1573
>                 URL: https://issues.apache.org/activemq/browse/AMQ-1573
>             Project: ActiveMQ
>          Issue Type: Bug
>    Affects Versions: 5.0.0
>            Reporter: Marcus Nilsson
>            Assignee: Rob Davies
>             Fix For: 5.3.0
>
>
> Two brokers A <-> B. 
> 1. B subscribes to x.a and x.>. 
> 2. A registers subscription x.a in ConduitBridge
> 3. A examines subscription x.> in ConduitBridge:
> * A DestinationFilter is created for x.>
> * The filter matches the old subscription for x.a
> * Consumer B is added as "interested" in x.a
> 4. Consumer on B will only receive messages for x.a, but not x.b.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to