Qualquer sistema sério precisa de monitoração, isso é um fato. Existem vários pontos para serem monitorados dentro de um sistema, o pessoal da Globo.com fez uma excelente apresentação sobre isso no FISL. Veja em: http://www.slideshare.net/denao/fisl-monitoracao-inteligente
No sistema que eu trabalho aqui na empresa, usamos muito JMS, então para nós, é imprecindível uma monitoração em cima dessa tecnologia.
Para quem não sabe, uma aplicação tenta enviar uma mensagem JMS um número configurado de vezes, caso a aplicação que recebe essa mensagem tenha problemas para receber a mensagem. Após o número X de vezes, a mensagem é enviada para uma DLQ, que traduzindo para o português é “fila-morta”. É este o ponto que estamos monitorando na nossa aplicação.
Criamos um método JMX que é chamado pelo Nagios de tempos em tempos, e que retorna OK se não existe nenhuma mensagem na DLQ, e NOK cc.
Caso retorne NOK, a minha equipe é avisada para que entre em ação e investigar o porquê da mensagem ter ido para a DLQ, e após isso, resgatar a mensagem da DLQ caso necessário.
O código para fazer isso é o seguinte:
public String validateMessagesSentToDLQ() {
logger.info("+++++ Validando se ha ou nao mensagens na DLQ +++++");
ObjectName name = null;
List<SpyMessage> listMessages = null;
String ret = RETURN_NOK;
try {
name = new ObjectName("jboss.mq.destination:service=Queue,name=DLQ");
listMessages = (List<SpyMessage>) getRmiAdaptor().invoke(name, "listMessages", null, null);
logger.info("Quantidade de mensages na DLQ: " + listMessages.size());
if (listMessages.size() == 0) {
ret = RETURN_OK;
}
} catch (Exception e) {
logger.error("Problemas ao verificar se há mensagens na DLQ!", e);
}
return ret;
}
Este código funciona no JBoss 4.0.4. Não sei dizer se funciona em outros servidores ou versões do JBoss, mas se não funcionar, não deve ser difícil adaptar ele.
Bom, tá aí a dica! Recomendo essa monitoração. Já nos ajudou bastante aqui no UOL!