DevSecOpsARTIGO

JBoss HornetQ component for Apache Camel

O projeto Apache
Camel é uma excelente solução
para integração de sistemas. Recentemente a JBoss lancou seu novo
produto de ultima geração em mensageiros, o HornetQ, veja aqui sobre a solução. Neste artigo, veremos um componente muito
simples que fiz para realizar a integração do Apache Camel com o JBoss
HornetQ.

Esta é a primeira versão do componente, pretendo ir melhorando de forma incremental, aos poucos, na sequência, esta versão
ainda é beta, tem algumas limitações. Mas já é possível você trabalhar
com as uri usando o meu componente para acessar as filas e tópicos do
HornetQ.

Download e uso do componente


Você pode baixar os fontes do meu repositório do Subversion. Uma vez que você tenha feito o download, é preciso instalar o
componente usando o Maven. Para fazer isso digite na pasta do projeto o
seguinte comando:

$ mvn clean install

Depois você está pronto para usar o componente em seu projeto. Nos
diretórios src/test/java e src/test/resources você conta com um exemplo de como usar o mesmo com o camel. Vou comentar com um
pouco mais de detalhes a forma de uso.

Uma vez instalado no maven, você deve referenciar o componente no
pom ou no classpath da sua aplicação. Para referenciá-lo no pom, use a
seguinte dependência:

 <groupId>com.blogspot.diegopacheco.java.sandbox</groupId><br />    <artifactId>hornetq-camel-component</artifactId><br />    <version>1.0-SNAPSHOT</version>

Este componente é uma extensão do componente de JMS do camel,
de forma que, a princípio, muitas coisas já funcionam por herança, a
sintax de URI é a mesma. O ID do bean registrado como componente no
spring deverá ser usado nas uri que você utilizar durante o seu
roteamento.

Configuração no Spring e customização

 <bean id="hornetq" class="com.blogspot.diegopacheco.camel.hornetq.component.HornetQComponent" ><br />        <property name="useNettyDefaults" value="true" /><br />    </bean>

Esta é a configuração mais simples, assim o componente assume que você
quer usar o netty
como connector defaut
e está usando na port default em localhost.
Você pode trocar esta configuração para usar outro conector ou até mesmo
criar o seu conector customizado do netty; também é possível passar o
id do cliente através da customização, seria algo como no XML abaixo:

 <bean id="hornetq" class="com.blogspot.diegopacheco.camel.hornetq.component.HornetQComponent">        <br />        <property name="connectionFactory"><br />            <bean class="com.blogspot.diegopacheco.camel.hornetq.component.HornetQCamelConnectionFactory"><br />                <property name="transportConfiguration"><br />                    <bean class="org.hornetq.api.core.TransportConfiguration" ><br />                        <constructor-arg index="0"><br />                            <value>org.hornetq.integration.transports.netty.NettyConnectorFactory</value><br />                        </constructor-arg><br />                    </bean><br />                </property><br />            </bean><br />        </property>        <br /></bean>

Usando o HornetQ através das URI do Camel

Bom, agora chegou a hora mais esperada: o uso através do padrão de URI
do camel. Confira o trecho de XML abaixo:

    <camelContext xmlns="http://camel.apache.org/schema/spring" ><br />        <route><br />            <from uri="file://src/test/resources/data?delete=true"/><br />            <to uri="hornetq:queue:queue_hornetq"/><br />        </route><br />        <route><br />            <from uri="hornetq:queue:queue_hornetq"/><br />            <to uri="bean:beanConsumer"/><br />        </route><br />    </camelContext>

Como você pode ver estou usando o hornetq na uri, este é o nome do id
do bean do Spring que se refere ao HornetQComponent. Você poderia usar
outro valor aqui, desde que este valor seja o mesmo no qual está no
bean do spring. Ainda é possível usar as anotações para producers e
consumers do Camel, uma vez que nas anotações você usa o mesmo estilo de
URI.

Limitações conhecidas e futuras implementações

Esta é a primeira versão, é possível que existam bugs, eu já sei de
algumas limitações e coisas que não implementei ainda. Nesta sessão vou
falar um pouco mais do que vai ser implementado nas próximas versões e
que é uma limitação neste momento:

  • Criar filas e tópicos de forma dinâmica quando elas não existem no
    HornetQ
  • Acessar o HornetQ passando usuário e senha para aumentar a
    segurança(hoje usa o ‘guest’)
  • Suporte pooling e recursos JNDI

Espero que tenham gostado (lembrando que
é beta), logo trarei mais novidades, contribuições são bem-vindas.

Abraços e até a próxima.

é Técnico em Processamento de Dados e graduando em Ciências da Computação(7º sem.) na Ulbra. Já trabalhou com desenvolvimento de software em VB, ASP, .NET e PHP. Atualmente é Arquiteto de Software criando soluções corporativas em Java. Certificado pela SUN com SCJP 5 e SCWD 5. Mantém o blog (diego-pacheco.blogspot.com).

Ver perfil