[英]Using ActiveMQ 5, is it possible to configure the broker with in memory and network connections?
[英]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.