Вопрос

Я вижу проблему, в которой очередь не подкреплена, однако время для потребителя фактически выполняет сообщение JMS, составляет от 100 до 200 секунд от создания (как измеряется через jmstimestamp-thicktime).

Поток был довольно низким до очереди, меньше 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);
        }
Это было полезно?

Решение 2

Как оказывается, ActiveMQ вела себя хорошо в порядке, мои рабочие взяли слишком долго, отсюдат резервировать очередь. Код в моем вопросе позволил мне увидеть это.

Другие советы

Насколько вы уверены, что потребитель немедленно вытягивает сообщение с очереди? Activemq предоставляет JMSActiveMQBrokerInTime и JMSActiveMQBrokerOutTime свойства, которые вы можете использовать для подтверждения этого (см. Свойства сообщения ActiveMQ).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top