1

キューがバックアップされていないという問題が発生していますが、コンシューマが実際に JMS メッセージを実行するまでの時間は、作成から 100 ~ 200 秒です (JMSTimestamp-CurrentTime で測定)。

キューへのフローはかなり低く、1 分間に 30 件未満のメッセージでした。ActiveMQ を再起動することで問題を解決できました。その後、メッセージは作成されてから 1 ミリ秒未満で開始されました。

ActiveMQ 5.4.1 を使用していますが、MDB で行われている作業の通常の合計実行時間は 2 ミリ秒未満です。遅延の時点で、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);
        }
4

2 に答える 2

0

コンシューマーがキューからメッセージをすぐに引き出していることをどの程度確信していますか? ActiveMQ は、これを確認するために使用できるJMSActiveMQBrokerInTimeおよびプロパティを提供します ( ActiveMQ メッセージ プロパティを参照してください)。JMSActiveMQBrokerOutTime

于 2010-11-19T21:02:51.283 に答える
0

結局のところ、ActiveMQ は問題なく動作しており、ワーカーの処理に時間がかかりすぎたため、キューがバックアップされていました。私の質問のコードで、それを見ることができました。

于 2012-01-09T17:47:10.533 に答える