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);
}
答案 0 :(得分:0)
免责声明:我不熟悉activemq,我只是通过the documentation进行调查和阅读。对于这样的事情,你几乎总能在那里找到解决方案,因为这可能被认为是一个常见的问题。
据我所知,您正在等待同步以收到消息,并且您已设置无超时。因此,发生这种情况的线程将永远被阻止(正如您所经历的那样)。
要取消ActiveMQMessageConsumer
对象,您需要调用close()
方法。但是,在您的情况下,如果我正确地同步调用receive
,则必须实现某种多线程环境,其中第二个线程未被阻止,并且可以调用{{ 1}}在消费者对象上。