JMS メッセージを ActiveMQ に送信するために使用されるクラスのテストを作成しようとしています。私が達成しようとしているのは、テスト中のクラスのメソッドを取得して、ローカルホストの ActiveMQ インスタンスにメッセージを送信し、テストでメッセージを取得して、それが正しいことを確認することです。
これをブローカーの url: として選択しました。これは、ローカルの ActiveMQ インスタンスが作成され、メッセージがvm://localhost?broker.persistent=true
KahaDB (これも作成されます) に格納されることを意味します。接続を閉じると、メモリ内のメッセージは取得する前に失われます。)broker.persistent=false
finally
メッセージを取得して検証するために、次のコードがあります。
//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 を使用しています。