ActiveMQ でパフォーマンス テストを実装しようとしているので、基本的なプロデューサーとコンシューマーをセットアップして、キューを介してメッセージを送受信します。問題なくプロデューサーを作成し、特定の数のメッセージをキューに書き込むようにしました。
for(int i = 0; i < numberOfMessages; i++){
try{
String message = generateText(sizeOfMessage);
produceMessage(message);
}
catch (Exception e) {
logger.error("Caught exception while sending message", e);
}
}
これは問題なく完了し続けており、正しい数の保留中のメッセージがある管理者 Web サイトのチェックでこれを確認しました。
キューからメッセージを受信しようとすると、問題が発生します。単純なコンシューマーを使用してキューから読み取ると、キューからさまざまな数のメッセージが読み取られますが、メッセージの 1 つを受信しようとすると停止します。読み取るメッセージがまだキューにあることがわかりますが、クライアントはメッセージの 1 つを通過しません。メッセージを受信するための簡単な方法を使用しています。
Message message = jmsTemplate.receive();
一部のメッセージ(約20〜30)で機能しますが、ロックするだけです。メッセージ内の文字の一部がエスケープ文字である可能性があることが示唆されました (これはパフォーマンス テストであり、実際にはコンテンツを送信していないため、さまざまな長さのランダムな文字列を使用していました)。すべてのメッセージを変更しました。これは、文字「2」の繰り返しであり、まだ運がありません。ActiveMQ キューにアクセスするために必要なすべてのコンポーネントをロードするために Spring 構成を使用しており、キューはローカルホストで実行されています。