HornetQ: Simples, Performatico e Zumbido

Com a performance superior ao resultado anterior superando 307%, realmente é um número bem impressionate e que reflete o trabalho focado em performance da sua equipe de desenvolvimento. Este trabalho focando em performance tem dois elementos fundamentais: Netty e Persistência.
Netty é um framework focado para construir aplicações que tiram o máximo de performance da rede usando eventos de forma assíncrona. Ele foi criado por Trustin Lee que é o fundador dos projetos Apache Mina e Apiviz. O Transporte é basicamente delegado ao Netty quando o cliente e o servidor estão em diferentes maquinas virtuais ou invm quando o cliente e o servidor estão na mesma maquina. Tudo isto e configuravel e pode ser customizado, caso você queira mais detalhe de uma olhada neste post que fala sobre os Connectors & Acceptors no HornetQ.
Um pouco mais sobre a Arquitetura do Netty

Visão Geral da Arquitetura do Netty
Basicamente você pode efetuar o transporte usando a API de NIO de maneira bloqueante ou não bloqueante. Você ai tem suporte a diversos protocolos e formatos de dados como protocolos binários, procolos baseados em texto e até mesmo o Protobuf que é um protocolo da Google e é bem rápido. Além disso existe suporte a sugurança em SSL e integração com com container como Spring e JBoss Microcontainer.
O HornetQ usa a injeção de dependências do JBoss Microcontainer para configuração, feita através de XML em um estilo muito parecido com o do Spring Framework, isso é bom por que deixa muito fácil a customização do comportamento da soluções e deixa um bom gancho para extenssibilidade.O uso do JBoss Microcontainer é um dos pontos em que ele se difere da solução da Apache o ActiveMQ que é baseado em cima do Spring Framework.
A Persistência do HornetQ
Não existe mais suporte a persistência em banco de dados no HornetQ, na verdade nunca existiu, só nas versões antetiores das soluções de mesageria da JBoss. Já de conhecimento de todos que a persistência em banco de dados é muito lenta, devida a API de JDBC. O banco de dados lhe da muita resiliência mas performance, talvez a equipe do HornetQ esteja puxando um tendência nas soluções de mesageria ao retirar o suporte a banco de dados.
Várias soluções de mesageria tem o seu próprio Journal. Não foi deferente com o HornetQ, além de ter o seu próprio journal ele tem duas formas de escrever no disco basicamamente, a primeira é usando a API de NIO. A outra forma que é realmente rápida é focada para sistemas operacionais Linux e usa uma pequena camada JNI para acessar o libaio do linux.
O Journal da solução é circular e transacional, funciona em nível de kernel graças ao libaio, existem uma serie de arquivos pre-alocados que tem o tamanho mais proximo possível do cilimdro do disco, dai surgiu um valor mistico de 10mb que o pessoal do hornetq achou, mas segundo eles isso pode variar conforme o disco. São apénas usados os arquivos pre alocados, desta forma eles evitam os movimentos do disco rigido. Além disto tudo existe um controle muito otimizado para fazer a deleção e limpeza. Se você quizer mais detalhes confira este post do Clebert.
O HortnetQ comtém muitos exemplos em sua distribuição, mais de 70. Você pode usar a solução dentro do JBoss se quizer usando um modulo de resource adapter que vem na distrinuição da solução. Também é possivel usar a solução de forma standalone e também de forma "embarcada" dentro da sua aplicação.
Um recurso que eu gostei bastante é a detecção de conexões mortas. Isto é feito através do TTL e o proprio servidor mata recursos que estão mortos evitando que o servidor caia por falta de memoria, um warning é emitido no console e nos logs do servidor indicando isso.
O HornetQ realmente esta vindo contudo a performance e simplicidade são absurdamente bons, o unico porem é que não existem muitas funcionalidades fora do básico, na versão 2.1 vai vir suporte a REST e AMQP o que vai ser um boa.
Abraços e até a próxima.