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.







