2010-11-19 19 views
0

コンシューマーが実際にJMSメッセージを実行する時間は、(JMSTimestamp-CurrentTimeで測定した場合)100秒から200秒の間ですが、キューはバックアップされません。ActiveMQコンシューマー実行遅延

フローはキューに対してかなり低く、1分あたり30メッセージ以下でした。私はActiveMQを再起動して問題を解決することができました。その後、メッセージは作成されてから1ms以内に開始されました。

私はActiveMQ 5.4.1を使用しています。MDBで行われている作業の通常の合計実行時間は2ms未満です。遅れた時点では、ActiveMQログにエラーメッセージがなく、CPUが少なく、十分なメモリがありました。

消費者がキューからメッセージを引き出しているのに、何らかの理由でメッセージが表示されているようです。

この問題の原因となっている設定上の問題はありますか?

編集:

次のように私のMDBの最初の行は次のとおりです。

/* Check the time since this message was created versus processed */ 
     try { 
      long secondsToProcess = TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis() - aMessage.getJMSTimestamp()); 
      if (secondsToProcess > 5) { 
       log.error("JMS Consumer Start Delay: " + secondsToProcess + " s" + " JMS Message took more then 5 seconds to be processed"); 
      } else { 
       log.debug("JMS Consumer Start Delay: " + secondsToProcess + " s"); 
      } 
     } catch (Exception e) { 
      log.error(e); 
     } 
+0

MDBの上部にログステートメントを置いて、実際にそれを取得していることを確認しましたか?これはいくつかの奇妙なトランザクションのバグのようです。 – javamonkey79

+0

はい、私は更新された質問を参照してください – Jeremy

答えて

0

ActiveMQはうまく動作していました。私のワーカーは時間がかかりすぎてキューをバックアップしていました。私の質問のコードは私にそれを見ることを許した。

0

あなたは、消費者がすぐにキューからメッセージを引っ張っていることをどのように確信していますか? ActiveMQには、これを確認するために使用できるJMSActiveMQBrokerInTimeJMSActiveMQBrokerOutTimeのプロパティがあります(ActiveMQ message properties参照)。

+0

ありがとう私はそのショットを与えます – Jeremy

+0

SimonJ、ブローカーの合計時間はSystem.currentTimeMillis() - aMessage.getJMSTimestamp()とほぼ同じです。これは、私には、ブローカーがそれらを通過させるのが遅いことを示唆しています。 – Jeremy

関連する問題