2

我编写了一个简单的程序,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会正确发送给代理,但我的程序不会退出并继续运行。当我将connection.close();语句添加到上述程序的末尾时,我的程序完成并正确退出。

我的问题是:这种行为的原因是什么?

4

1 回答 1

2

只要有任何连接打开,(AMQ-)分配的处理从/向这些连接读取和写入消息的线程就会保持 VM 运行(这些不是守护线程)。

调试程序时可以看到线程。

于 2013-02-18T07:07:52.853 回答