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