Java 内存中的activemq未跨连接持久化

Java 内存中的activemq未跨连接持久化,java,jms,activemq,Java,Jms,Activemq,我需要帮助了解有关ActiveMQ的一些信息 connectionFactory = new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false"); 场景#1-我创建一个连接,关闭它,打开一个新连接,然后尝试从队列中检索消息。此结果未找到消息 Connection connection = connectionFactory.createConnection(); connecti

我需要帮助了解有关ActiveMQ的一些信息

    connectionFactory = new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false");
场景#1-我创建一个连接,关闭它,打开一个新连接,然后尝试从队列中检索消息。此结果未找到消息

        Connection connection = connectionFactory.createConnection();
    connection.start();
    Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
    Queue queue = session.createQueue(CRIMS_REQUEST_QUEUE);

    MessageProducer producer = session.createProducer(queue);
    producer.send(session.createTextMessage(message));
    session.commit();

    connection.stop();
    connection.close();



    Connection connection2 = connectionFactory.createConnection();
    connection2.start();
    Session session2 = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
    Queue queue2 = session2.createQueue(CRIMS_REQUEST_QUEUE);
    MessageConsumer consumer2 = session2.createConsumer(queue2);
    TextMessage msg2 = (TextMessage)consumer2.receive(1000);
    System.out.println("The msg");
    System.out.println(msg2.getText());
    connection.close();
场景#2-我使用相同的连接创建了一个新会话,它工作得很好

        Connection connection = connectionFactory.createConnection();
        connection.start();
        Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        Queue queue = session.createQueue(CRIMS_REQUEST_QUEUE);

        MessageProducer producer = session.createProducer(queue);
        producer.send(session.createTextMessage(message));
        session.commit();

//      connection.stop();
//      connection.close();



//      Connection connection2 = connectionFactory.createConnection();
//      connection2.start();
        Session session2 = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        Queue queue2 = session2.createQueue(CRIMS_REQUEST_QUEUE);
        MessageConsumer consumer2 = session2.createConsumer(queue2);
        TextMessage msg2 = (TextMessage)consumer2.receive(1000);
        System.out.println("The msg");
        System.out.println(msg2.getText());
        connection.close();

现在的情况是,我让这段代码设置了一个测试用例(因此是内存队列),我希望能够在测试队列中放置一条消息,然后在实际代码中进行访问(将连接工厂从一个传递到另一个)。我应该传递连接吗?

您正在看到预期的行为。您正在使用的URL(即,
vm://localhost?broker.persistent=false
)实际上在建立第一个连接时创建并启动一个嵌入式代理(请注意禁用了持久性)。一旦该连接关闭,代理也将消失

因此,您应该传递连接,而不是连接工厂。或者您可以独立管理代理实例

请在(向下滚动至“使用ActiveMQConnectionFactory”部分)中阅读更多关于此的信息