JBoss HornetQ component for Apache Camel

Em um post anterior eu falei sobre o projeto Apache Camel que é um excelente solução para integração de sistemas. Recetemente a JBoss lancou seu novo produto de ultima geração em messageria o HornetQ, em outro post passado escrevi sobre a solução também. Neste post vim mostrar 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 o componente de forma incremental aos poucos na sequencia, esta versão ainda é beta, tem algumas limitações. Mas já é possivel você trabalhar com as uri usando o meu componente para acessar as filas e topicos do HornetQ.



Download e Uso do Componente

Você pode baixar os fontes do meu repositório do Subversion: http://diegopacheco.svn.beanstalkapp.com/sandbox/trunk/community/hornetq-camel-component uma vez que você tenha feito o download você tem que instalar o componente usando o Maven. Para fazer isso digite na pasta do projeto o seguinte comando:
$ mvn clean install

Depois disso você esta pronto para usar o componente em seu projeto. Nos diretórios src/test/java e src/test/resources você conta um 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 o componente você deve referenciar o mesmo no pom ou no classpath da sua aplicação, para referencia-lo no pom use a seguinte dependência:

<br /> <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 principio muitas coisas já funcionam por herança, a sintax de URI é a mesma. O ID do bean registrado como componente no spring devera ser usado nas uri que você utilizar durante o seu roteamento.

Configuração no Spring e Customização

<br /> <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, asssim o componente assume que você quzer usar o netty como connector defaut e esta 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 é possivel passar o id do cliente através da customização, seria algo como no XML a baixo:

<br /> <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 :D O uso através do padrão de URI do camel.Confira o trecho de XML a baixo:

<br>    <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><br>

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 esta no bean do spring. Ainda é possivel usar as anotações para producers e comsumers 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, é possivel 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 topicos de forma dinamica 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 gostando(lembrando que é beta :) ), logo post mais novidades, contribuições são bem vindas.

Abraços e até a próxima.

Popular posts from this blog

Kafka Streams with Java 15

Rust and Java Interoperability

HMAC in Java