我正在尝试为用于将 JMS 消息发送到 ActiveMQ 的类编写测试。我想要完成的是在被测类中获取一个方法,将消息发送到本地主机中的 ActiveMQ 实例,然后在测试中选择消息并验证它是否正确。
我选择了这个作为我的代理 url: vm://localhost?broker.persistent=true
,这意味着将创建一个本地 ActiveMQ 实例,并将消息存储在 KahaDB 中(它也是创建的。)(我尝试使用broker.persistent=false
,但由于被测方法有一个finally
-clause关闭连接,然后内存中的消息会在我检索它们之前丢失。)
为了检索消息并验证它,我有以下代码:
//call method under test to send a message
//create a ConnectionFactory with url vm://localhost?broker.persistent=true
final Connection connection = connectionFactory.createConnection();
connection.start();
final Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
final Destination dest = session.createQueue("my.queue");
final MessageConsumer messageConsumer = session.createConsumer(dest);
Message message = messageConsumer.receive(1000);
messageConsumer.close();
session.close();
connection.close();
我的问题是,在运行此代码时,消息并未从 KahaDb 中删除!在多次测试运行后,第一次添加的消息将被反复阅读。我在这里遗漏了什么,或者这是 KahaDB/ActiveMQ 中的错误?我正在使用 ActiveMQ 5.7.0。