「ブローカーダウン」フェーズをシミュレートするテストを作成しようとしています。したがって、私はしたいです
- ローカルブローカーを始める
- メッセージを送信1
- ブローカーを停止します
- メッセージ2を送信します(もちろん届きません)
- ブローカーを再起動します
- メッセージを送る3
http://activemq.apache.org/how-do-i-restart-embedded-broker.htmlによると、新しい BrokerService を初期化してブローカーを再度開始することをお勧めします。したがって、コードは(ほぼ)次のようになります。
private BrokerService _broker;
private void startBroker() throws Exception {
_broker = new BrokerService();
_broker.addConnector("vm://localhost?broker.persistent=false");
_broker.start();
_broker.waitUntilStarted();
}
private void stopBroker() throws Exception {
_broker.stop();
_broker.waitUntilStopped();
}
@Test
public void publishMessagesWithServerBreakdownInBetween()
throws Exception
{
startBroker();
... send and receive message (works fine)
stopBroker();
... send message (fails of course)
startBroker(); // this fails with java.io.IOException: VMTransportServer already bound at: vm://localhost?broker.persistent=false
... send and receive message
}
この問題は、コード内のコメントとして既に言及されています: The restart of the broker fails due to the error : java.io.IOException: VMTransportServer already bound at: vm://localhost?broker.persistent=false
ActiveMQ フォーラム ( http://activemq.2283324.n4.nabble.com/VMTransportServer-already-bound-td2364603.html ) で同様の問題を見つけましたが、私の場合、ホスト名は null ではありません。
もう 1 つのアイデアは、2 つの異なるブローカー名を設定することでしたが、これも役に立ちませんでした。
私は何を間違っていますか?