0

我正在使用 Java EE 和 ActiveMQ。我想实现一个 JMS 队列,我可以在其中向我的 QUEUE 发送消息,并且 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);

    }

但问题是,每次我运行这段代码时,它都会向我的队列添加一个新的消费者,然后我有一些奇怪的行为,消费者没有正确传递消息。如果我只有一个消费者,那就完美了。

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

4

1 回答 1

0

我遇到了完全相同的问题。您需要确保您的战争在未部署时具有正常关闭过程的概念。

您可以通过一个 HTTP Servlet 来实现这一点,该 Servlet 实现了 init(在此处进行所有初始化)和 destroy(在此处进行所有清理)。取消部署战争时,JVM 将调用 Destory()。

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

于 2013-10-22T16:28:08.833 回答