Artigo do tipo Tutorial
Recursos especiais neste artigo:
Contém nota Quickupdate.
Desvendando o JBoss HornetQ
Este artigo apresentará as principais características, conceitos e configurações por trás do servidor JBoss HornetQ. Por meio do uso de alguns cenários práticos, já validados por grandes empresas, será exposta ao leitor uma visão clara da aplicabilidade do HornetQ.

Em que situação o tema é útil
Desenvolvedores e arquitetos que desejam integrar aplicações com o uso de serviços de mensageria podem encontrar no HornetQ uma ferramenta simples e bastante poderosa. A partir do seu suporte a vários protocolos de comunicação é possível integrá-la a aplicações desenvolvidas em diferentes linguagens.

Hoje em dia, é cada vez maior o número de sistemas que dão suporte às operações das empresas, sejam eles desenvolvidos in company ou adquiridos de empresas especialistas em determinados segmentos como a SAP, Oracle PeopleSoft ou Totvs. O fato é que, sem essas ferramentas seria impossível que verticais como bancos, telecons, Utilities e Oil & Gas conseguissem atender de forma rápida e satisfatória um mercado cada vez mais exigente. Mas, a mesma quantidade de softwares que as apoiam, traz consigo grandes desafios para as equipes de TI, como por exemplo, prover a infraestrutura necessária para execução dessas ferramentas, contratação e capacitação de pessoal e, por último, mas não menos importante, garantir que eles conversem entre si.

O último desafio citado no parágrafo anterior é sem sombra de dúvida um ponto bastante crítico dentro de qualquer organização. Fazer com que vários sistemas, na maioria das vezes, desenvolvidos em linguagens e plataformas diferentes, troquem informações, é uma tarefa bastante árdua. Na Ciência da Computação, existe uma área responsável por fazer com que sistemas deixem de serem meras caixas isoladas e passem a trocar informações. Esse campo é conhecido como integração de sistemas. A Wikipédia (em inglês) traz vários significados para Integração de Sistemas, mas uma delas chama mais a atenção, por ser simples e bastante abrangente, que é: “A junção de subsistemas em um único, a fim de assegurar que juntos funcionem como um só sistema.”. Afinal de contas, essa é a visão do usuário que opera o sistema, correto?

Quando falamos em integração de sistemas, temos ao nosso dispor algumas técnicas que nos auxiliam na resolução desse problema. São elas:

· Compartilhamento de Banco de Dados – As aplicações possuem acesso ao banco de dados uma da outra;

· Remote Procedure Call (RPC) – As aplicações expõem seus dados ou operações através de APIs. Encaixam-se nesse perfil os webservices e EJBs;

· Transferência de Arquivo – As aplicações trocam informações utilizando arquivos geralmente em um formato texto;

· Mensageria – Nesse modelo, um software conhecido como middleware (MOM) é responsável por garantir a troca de informações entre as aplicações.

Usando como alicerce a última técnica citada, será apresentado neste artigo o HornetQ, um poderoso servidor de mensageria open source mantido pela JBoss e que atualmente equipa o servidor JBoss AS 7 como serviço de mensagem padrão. Mais a frente o leitor terá a oportunidade de conhecer a fundo os principais conceitos e configurações por trás desse servidor, como por exemplo, o mecanismo de segurança e persistência, roteamento de mensagens, cluster, criação de filas e tópicos, entre outros recursos.

Mensageria

Para que o leitor iniciante possa tirar um melhor proveito desse artigo, é importante que ele conheça alguns conceitos que são empregados pelos sistemas de mensageria. O leitor que já tiver esse conhecimento pode saltar para o próximo tópico sem qualquer prejuízo para o aprendizado. Quando falamos em mensageria, cinco conceitos são muito importantes, a saber:

· Message-Oriented Middleware (MOM): Responsável por fazer a ponte entre os sistemas participantes do processo de integração, tem como principal objetivo receber uma mensagem de um cliente e garantir que ela seja entregue ao sistema de destino. Algumas de suas características são: não podem se conectar a um programa cliente, deve garantir segurança, integridade dos dados e possuir capacidade de recuperação em caso de falha. Aqui esse papel será feito pelo HornetQ;

· Canal: Meio pelo qual o cliente envia uma mensagem a um sistema destinatário;

· Mensagem: Pacote de dados que carrega uma informação a ser entregue a um destinatário. O seu corpo pode carregar informações no formato XML, JSON ou binário;

· Emissor: Sistema responsável pelo envio de uma mensagem;

· Consumidor: Sistema que consome uma mensagem do canal enviada para ele.

Filas

Os canais são componentes especiais configurados no MOM conhecidos como filas e são classificados em dois modelos:

· Point-To-Point: Usado quando é necessário garantir que uma mensagem seja entregue a um único consumidor. No MOM ele é representado como um componente chamado Queue;

· Publish/Subscribe: Usado quando o cliente deseja entregar a mesma mensagem a vários consumidores.

Instalando, inicializando e parando o Servidor

O HornetQ pode ser obtido através do Portal JBoss. O endereço para download pode ser encontrado na seção Links. Durante esse artigo utilizaremos a versão 2.1.14.Final (ver Figura 1), pois quando da escrita do artigo essa era a última versão estável.

O processo de instalação é muito simples, basta efetuar o download do arquivo correspondente à versão citada e descompactá-lo no diretório da sua escolha. Contudo, por se tratar de uma aplicação escrita em Java, você precisará do Java instalado na sua máquina para rodá-lo, mais exatamente a versão 1.6 ou superior.

No decorrer do artigo utilizaremos o Linux para as demonstrações, mas o leitor que não possui conhecimento nesse sistema operacional não precisa se preocupar, pois, caso seja necessário uma configuração específica de outro ambiente, iremos mostrar como fazê-la.

Figura 1. Área de download do HornetQ no Portal JBoss.

Estrutura de diretórios

Antes de realizarmos qualquer procedimento no servidor, vamos entender melhor como está organizado a sua estrutura de diretórios, apresentada na Figura 2. Nela, podemos visualizar as seguintes pastas:

· bin – Contém os scripts necessários ao gerenciamento do servidor como, por exemplo, para inicializa-lo e pará-lo;

· config – Contém os arquivos XML responsáveis pelas configurações das instâncias dos servidor;

· docs – Contém a documentação do servidor;

· example – Contém uma grande variedade de aplicações exemplo que utilizam as APIs JMS e HornetQ Core;

· lib – Contém as bibliotecas (.jar) necessárias para a execução do servidor e outras que podem ser compartilhadas entre as aplicações clientes que precisam acessar o HornetQ;

· licenses – Contém arquivos texto com as informações de licença do HornetQ;

· native-src – Contém o código fonte da biblioteca HornetQLibIO, que pode ser utilizada pelo HornetQ em ambientes Linux para tirar proveito do mecanismo AIO presente em algumas versões do kernel do Linux;

· schemas – Contém os arquivos XSDs utilizados para definição dos arquivos XML de configuração;

· tools – Contém a ferramenta Ant, usada para construir e rodar o HornetQ.

Figura 2. Estrutura de diretórios do Servidor.

Start/Stop

Agora que você já conhece a estrutura de diretórios do HornetQ, chegou a hora de testarmos a sua instalação. Os processos de inicialização e parada estão associados respectivamente aos arquivos destacados a seguir:

· Windows – run.bat / stop.bat;

· Linux – run.sh / stop.sh.

Estes arquivos podem ser encontrados no subdiretório bin dentro do diretório de instalação do HornetQ que, a partir de agora, sempre que necessário, iremos nos referir como HORNETQ_HOME.

Usuários da plataforma Windows poderão rodar o servidor clicando duas vezes sobre o arquivo correspondente à inicialização; neste caso o run.bar. Já os usuários do Linux precisarão de um passo extra para fazê-lo, como dica os comandos:

$ chmod 777 run.sh

$ sh ./run.sh

Assim que o script for executado será possível acompanhar um log similar ao da Figura 3 sendo exibido no console. Para verificar se o servidor foi inicializado corretamente, execute o comando telnet localhost 1099. Caso uma conexão seja estabelecida, indica que o servidor foi inicializado com sucesso.

abrir imagem em nova janela

Figura 3. Parte do log de inicialização do HornetQ.

Para parar o servidor da maneira correta, basta utilizar os scripts stop.sh/stop.bat. Dessa forma você garante que os processos do servidor serão interrompidos sem causar lock em arquivo, efeito comum quando a execução é interrompida utilizando Ctrl + C.

Arquivos de Configuração

Os arquivos de configuração do HornetQ podem ser encontrados no diretório HORNETQ_HOME/config. Observe na Figura 4 como está organizada a estrutura de subdiretórios. As pastas jboss-as-4, jboss-as-5 e stand-alone representam os perfis de execução do HornetQ. Elas possuem as configurações necessárias para executá-lo de forma integrada ao JBoss Application Server nas versões 4, 5 e também em modo standalone, respectivamente. Em cada um desses diretórios é possível encontrar os subdiretórios clustered e non-clustered, onde ficam as configurações relacionadas ao modo de operação do servidor, ou seja, se a instância do servidor suportará ou não o modo cluster.

Será também dentro dos diretórios clustered e non-clustered que iremos encontrar os arquivos de configuração e auxiliares do servidor, a saber:

· hornetq-beans.xml – Neste arquivo são definidos todos os serviços do HornetQ, bem como a dependência entre eles;

· hornet-configuration.xml – Principal arquivo de configuração do servidor. Através dele são configurados objetos como: connectors, acceptors, cluster, segurança, bridge, entre outros;

· hornetq-users.xml – Armazena as informações relacionadas ao mecanismo de segurança do HornetQ, como usuários e perfis;

· hornetq-jms.xml – Usado para configuração de queues, topics e connection factories;

· logging.properties – Como o HornetQ utiliza o Java Logging Framework como mecanismo de log, será nesse arquivo que os ajustes relacionados a esse assunto serão configurados;

· jndi.properties – Responsável pelo mapeamento do serviço JNDI.

...

Quer ler esse conteúdo completo? Tenha acesso completo