7

「ブローカーダウン」フェーズをシミュレートするテストを作成しようとしています。したがって、私はしたいです

  1. ローカルブローカーを始める
  2. メッセージを送信1
  3. ブローカーを停止します
  4. メッセージ2を送信します(もちろん届きません)
  5. ブローカーを再起動します
  6. メッセージを送る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 つの異なるブローカー名を設定することでしたが、これも役に立ちませんでした。

私は何を間違っていますか?

4

1 に答える 1