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:
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
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:
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:
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:
Abraços e até a próxima.
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
Abraços e até a próxima.