Tutorial Camel : intégration et première route

Nous allons voir ensemble comment intégrer le framework Camel au sein d'une application utilisant Maven et Spring. Puis, nous créerons une route qui prendra un message en entrée, le modifiera via un processeur Camel, et l'enverra sur une queue ActiveMQ. C'est parti !

Versions utilisées

Voici les versions utilisées dans ce tutorial
Camel 2.7.0
Spring 3.0.5.RELEASE
Maven 3.0.2

Intégration du framework

Tout d'abord, il vous faut ajouter dans le pom.xml de votre application les dépendances suivantes :

<!-- 1) Dépendances Camel -->
   <!-- Core du framework -->
   <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-core</artifactId>
   </dependency>
   <!-- Spring support -->
   <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-spring</artifactId>
   </dependency>
   <!-- JMS support -->
   <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-jms</artifactId>
   </dependency>
<!-- Fin dépendances Camel -->

<!-- 2) Autres dépendances -->
   <!-- Composant Camel ActiveMQ externe -->
   <dependency>
      <groupId>org.apache.activemq</groupId>
      <artifactId>activemq-camel</artifactId>
   </dependency>
   <!-- JMS -->
   <dependency>
      <groupId>javax.jms</groupId>
      <artifactId>jms</artifactId>
   </dependency>
   <!-- Spring JMS -->
   <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>org.springframework.jms</artifactId>
   </dependency>
<!-- Fin autres dépendances -->

Déclaration du contexte Camel et du producer template

Déclarer dans la configuration Spring de votre projet :

<!-- Camel producer template -->
<bean id="camelProducerTemplate"
            class="org.apache.camel.spring.CamelProducerTemplateFactoryBean">
   <property name="camelContext" ref="camelContext" />
</bean>

<!-- Camel context -->	
<bean id="camelContext" class="org.apache.camel.spring.CamelContextFactoryBean">
   <property name="id" value="camel-test-context"/>
   <property name="builderRefs">
      <list>
         <ref bean="camelTest.routeBuilder.routeDefinition"/>
      </list>
   </property>
</bean>

NB : la propriété builderRefs référence les RouteBuilderDefinition qui seront chargées dans le contexte Camel.

Création de la route

Les RouteBuilderDefinition référencent les RouteBuilder qui permettent eux d'instancier les routes lors du démarrage du contexte Camel. Ainsi, pour créer une route, il faut étendre la classe RouteBuilder et redéfinir la méthode configure().
Dans notre exemple, nous allons créer une route qui pourra être appelée directement via une des méthodes send() du producer template. Elle appellera un processeur qui mettra le body du message en upper case et l'enverra sur une queue JMS ActiveMQ. Voici la configuration Spring nécessaire :

<!-- RouteBuilderDefinition -->
<bean id="camelTest.routeBuilder.routeDefinition" class="org.apache.camel.model.RouteBuilderDefinition">
   <property name="ref" value="camelTest.routeBuilder"/>
</bean>

<!-- RouteBuilder -->
<bean id="camelTest.routeBuilder" class="com.netapsys.camel.test.route.CamelTestRouteBuilder">
   <property name="camelTestQueue" value="camel.test.queue"/>
</bean>

Et la classe CamelTestRouteBuilder :

RouteBuilder.java

Création du processeur

Un processeur doit implémenter l'interface org.apache.camel.Processor et redéfinir la méthode process(Exchange) :

Processor.java

Il faut ensuite le déclarer dans le contexte Spring :

<!-- Camel processors -->
<bean id="camelTest.messageConverter.processor" 
                class="com.indom.camel.test.processor.MessageConverterProcessor"/>
<!-- End Camel processors -->

Notons ici que l'id du bean est celui utilisé à la ligne 46 de notre RouteBuilder.

Création du composant ActiveMQ

Elle se fait par configuration uniquement (l'id du composant est celui utilisé à la ligne 49 du RouteBuilder) :

<!-- Composant Camel ActiveMQ -->
<bean id="activemq.camelTest.component" class="org.apache.activemq.camel.component.ActiveMQComponent">
   <property name="configuration" ref="camelTest.jms.configuration"/>
</bean>

<!-- Configuration JMS -->
<bean id="camelTest.jms.configuration" 
		class="org.apache.camel.component.jms.JmsConfiguration">
   <property name="connectionFactory" ref="camelTest.jms.factory"/>
</bean>

<!-- Connections Factory -->
<bean id="camelTest.jms.factory" destroy-method="stop"
                class="org.apache.activemq.pool.PooledConnectionFactory">
   <property name="connectionFactory">
      <bean class="org.apache.activemq.ActiveMQConnectionFactory">
         <property name="brokerURL">
            <value>tcp://192.10.10.10:61616</value>
         </property>
         <property name="userName" value="username"/>
         <property name="password" value="password"/>
      </bean>
   </property>
</bean>

Et voilà!
Il ne nous reste plus qu'à appeler notre route de la manière suivante :

Appel Route.java

Le message reçu dans la queue camel.test.queue est bien celui attendu :

ActiveMQ

Un commentaire

  1. TOP ! Merci Hubert et merci Netapsys !
    Oui, à refaire ! Nous avons passé un moment vraiment agréable.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.