【发布时间】:2019-08-08 02:59:18
【问题描述】:
我需要帮助来了解有关 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();
发生的事情是,我让这段代码设置了一个测试用例(因此是内存队列),我希望能够在测试中的队列中暂存一条消息,然后在真实代码中访问(通过从一个到另一个的连接工厂)。我应该改为传递连接吗?
【问题讨论】: