I'm testing the activemq, and when I make my cosumers receive messages from
a queue in multi-threds , it only get half messages sent from producers.
would somebody can tell me why?


here is my source code:

public class Recv extends Thread {
    private static final String url = "tcp://localhost:61616";
    private static final String QUEUE_NAME = "TestQue";
    private static final String TOPIC_NAME = "TestTopic";
    public static int mode = 0;

    public void revceMessage() throws JMSException {
        Connection connection = null;
        TextMessage ms = null;
        StringBuffer str = null;
        int i = 0; 
        try {
            ActiveMQConnectionFactory connectionFactory = new
ActiveMQConnectionFactory(url);
            connection = connectionFactory.createConnection();
            connection.start();
            Session session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
            Destination destination = null;
            if(mode == 0)
                destination = session.createQueue(QUEUE_NAME);
            else
                destination = session.createTopic(TOPIC_NAME);
            MessageConsumer consu = session.createConsumer(destination,
null);
            while (true) {
                ms = (TextMessage) consu.receive();
                i++;
                if (ms == null) {
                    break;
                }
                str = new StringBuffer();
                str.append("thread:");
                str.append(this.getId());
                str.append(",receive:");
                str.append(i);
                System.out.println(str);
                str = null;
            }

        }
        catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (connection != null) {
                connection.close();
            }
        }
    }
    
    public void run() {
        try {
                this.revceMessage();
        } catch (JMSException e) {
                e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        Recv s = null;
        if ((args.length >0) && (!args[0].trim().equals("0")))
                mode = 1;
        System.out.println("mode is: " + mode + ", url:" + url);
        for(int i=0;i<2;i++) {
                s = new Recv();
                s.start();
        }
    }
}


-- 
View this message in context: 
http://www.nabble.com/why-queue-consumer-threads-only-get-half-messages---tp20088895p20088895.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Reply via email to