ActiveMQ,我怎样才能创建一个消费者?

时间:2013-10-08 17:52:04

标签: java jms activemq consumer

我正在使用Java EE和ActiveMQ。我想实现一个JMS队列,我可以在其中向我的队列发送消息,而Consumer + MessageListener应该读取此消息。

我的消费者代码如下:

private void initializeActiveMq() throws JMSException {
            // Create a ConnectionFactory
            ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerUrl);
            // Create a Connection
             connection = connectionFactory.createConnection();
             connection.start();
            // Create a Session
            session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);


            // Create the destination (Queue)
            Queue queue = session.createQueue(queueName);
             // Create a MessageConsumer from the Session to the Queue
             consumer = session.createConsumer(queue);

             consumer.setMessageListener(this);

    }

但问题是,每次我将运行此代码时,它会将新的消费者广告到我的队列,然后我有一些奇怪的行为,消费者没有正确地传递消息。如果我只有一个消费者,那就完美了。

那么如何确保队列中只有一个消费者呢?

1 个答案:

答案 0 :(得分:0)

我遇到过同样的问题。在取消部署时,您需要确保您的战争具有正常关闭过程的概念。

你可以通过拥有一个实现init的HTTP Servlet(在这里完成所有的初始化)和销毁(在这里清除你所做的所有事情)来实现这一点。当取消部署战争时,Destory()将被JVM调用。

我使用Spring来定义所有bean,ActiveMQ连接,消息使用者和生产者。我的init()从master xml文件加载Spring应用程序上下文,在本地缓存对它的引用,然后destory()在应用程序上下文中调用close()。