我无法停止或杀死消费者接收(0),如果等待时间为零毫秒,请帮我关闭activemq消费者

时间:2014-08-07 11:54:09

标签: java activemq

private boolean isRunning=false;
          try {
 ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("username","password",ActiveMQConnection.DEFAULT_BROKER_URL);
        // Create a Connection
        Connection connection = connectionFactory.createConnection();
        connection.start();
        // Create a Session
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // Create the destination
        Destination destination = session.createQueue("testQ");
        consumer = (ActiveMQMessageConsumer) session.createConsumer(destination);
       do {
            System.out.println("Waiting for message...");
            Message message = consumer.receive(0);
            if (message != null && message instanceof TextMessage) {
                TextMessage txtMsg = (TextMessage) message;
                System.out.println("Received: " + txtMsg.getText());
            }
            isRunning=true;
        } while (isRunning);

} catch (JMSException e) {
        System.out.println(e);
    } catch (Exception e) {
        System.out.println(e);
    }

1 个答案:

答案 0 :(得分:0)

免责声明:我不熟悉activemq,我只是通过the documentation进行调查和阅读。对于这样的事情,你几乎总能在那里找到解决方案,因为这可能被认为是一个常见的问题。

据我所知,您正在等待同步以收到消息,并且您已设置无超时。因此,发生这种情况的线程将永远被阻止(正如您所经历的那样)。

要取消ActiveMQMessageConsumer对象,您需要调用close()方法。但是,在您的情况下,如果我正确地同步调用receive,则必须实现某种多线程环境,其中第二个线程未被阻止,并且可以调用{{ 1}}在消费者对象上。