Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ActiveMQ,如何仅创建一个使用者?_Java_Jms_Activemq_Consumer - Fatal编程技术网

Java ActiveMQ,如何仅创建一个使用者?

Java ActiveMQ,如何仅创建一个使用者?,java,jms,activemq,consumer,Java,Jms,Activemq,Consumer,我正在使用JavaEE和ActiveMQ。我想实现一个JMS队列,在这里我可以向队列发送消息,并且Consumer+MessageListener应该读取这些消息 我的消费者的代码如下所示: private void initializeActiveMq() throws JMSException { // Create a ConnectionFactory ActiveMQConnectionFactory connectionFactory

我正在使用JavaEE和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);

    }
但问题是,每次我运行这段代码时,它都会将一个新的消费者广告到我的队列中,然后我会有一些奇怪的行为,消费者没有正确地传递消息。如果我只有一个消费者,它的工作原理是完美的


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

我也遇到过同样的问题。您需要确保您的war在取消部署时具有优雅关闭过程的概念

您可以通过一个HTTP Servlet来实现这一点,该Servlet实现了init,在这里完成所有初始化,在这里完成所有清除。当战争解除部署时,JVM将调用Destory


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

只调用此代码一次?问题是,我用此代码构建了一个war文件。每次我在服务器上重新部署我的ware文件时,这段代码都会调用,并添加一个新的使用者。目前唯一的解决方案是,每次重新部署war文件时,必须重新启动activemq,这将杀死所有消费者。但是我想要一个解决方案,我不能重新启动activemq。。