簡體   English   中英

內存中的activemq不能跨連接持久化

[英]In memory activemq not persisting across connections

我需要幫助來了解有關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 )實際上會創建並啟動嵌入式代理(請注意持久性已禁用)。 一旦該連接關閉,代理也將消失。

因此,您應該傳遞連接而不是連接工廠。 或者,您可以獨立管理代理實例。

ActiveMQ文檔中了解有關此內容的更多信息(向下滾動到“使用ActiveMQConnectionFactory”部分)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM