Pergunta

Estou vendo um problema em que uma fila não é backup, no entanto, o tempo para o consumidor executar a mensagem JMS está entre 100 e 200 segundos da criação (conforme medido pelo JMstimestamp -CurrentTime).

O fluxo foi bastante baixo para a fila, menos de 30 mensagens por minuto. Consegui resolver o problema reiniciando o ActiveMQ, após o qual as mensagens foram iniciadas em menos de 1 ms a partir de quando foram criadas.

Estou usando o ActiveMQ 5.4.1 e o tempo normal de execução total para o trabalho realizado no MDB é menor que 2ms. No momento do atraso, não havia mensagens de erro no log do ActiveMQ, a CPU era baixa e tinha muita memória.

Parece que o consumidor está tirando a mensagem da fila, mas sentado neles por algum motivo.

Existe algum problema de configuração que possa estar causando esse problema?

Editar:

A primeira linha do meu MDB é a seguinte:

 /* 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);
        }
Foi útil?

Solução 2

Acontece que o ActiveMQ estava se comportando muito bem, meus trabalhadores estavam demorando muito, fazendo o backup da fila. O código da minha pergunta me permitiu ver isso.

Outras dicas

Quão certo você tem que o consumidor está retirando a mensagem imediatamente? ActiveMQ fornece o JMSActiveMQBrokerInTime e JMSActiveMQBrokerOutTime propriedades que você pode usar para confirmar isso (veja Propriedades da mensagem ActiveMQ).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top