我用ActiveMQ编写了一个简单的程序,如下所示:
public static void main(String[] args) throws Throwable
{
final ActiveMQConnectionFactory conFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
final QueueConnection connection = conFactory.createQueueConnection();
final Session session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
final Destination destination = new ActiveMQQueue("MJ_SAF");
final MessageProducer producer = session.createProducer(destination);
Message message = session.createTextMessage("test");
message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, 20);
message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_PERIOD, 1);
message.setIntProperty(ScheduledMessage.AMQ_SCHEDULED_REPEAT, 1);
producer.send(message);
}当我执行这个程序时,消息发送给ActiveMQ broker,但是我的程序没有退出并保持运行。当我将connection.close();语句添加到上述程序的末尾时,我的程序完成并正常退出。
我的问题是:这种行为的原因是什么?
发布于 2013-02-18 15:07:53
只要有任何连接打开,(AMQ-)分配的处理从这些连接读取和向这些连接写入消息的线程就会使VM保持运行(这些线程不是守护线程)。
您可以在调试程序时看到线程。
https://stackoverflow.com/questions/14930758
复制相似问题