Apache Camel - Utilisation avec Spring

Nous allons maintenant recréer l'application du chapitre précédent en utilisant Spring. Cela nous donnera une idée de la façon de créer un routage Camel en XML plutôt qu'en DSL.

Créer un nouveau projet

Créer un nouveau Maven projet et précisez ce qui suit -

GroupId: BasketWithSpring
ArtifactId: BasketWithSpring

Sélectionnez l'emplacement par défaut de votre projet ou, si vous préférez, spécifiez le répertoire de votre choix.

Ajouter des dépendances

En plus des dépendances principales que vous avez utilisées dans l'application précédente, vous devez ajouter quelques dépendances supplémentaires pour utiliser Spring. Les dépendances sont ajoutées dans pom.xml. Maintenant, ouvrez pom.xml et ajoutez les dépendances suivantes -

<dependencies>
   ...
   <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.1.3.RELEASE</version>
   </dependency>
   
   <dependency>
      <groupId>org.apache.activemq</groupId>
      <artifactId>activemq-pool</artifactId>
      <version>5.15.2</version>
   </dependency>
   
   <dependency>
      <groupId>org.apache.activemq</groupId>
      <artifactId>activemq-pool</artifactId>
      <version>5.15.1</version>
   </dependency>
   
   <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-spring</artifactId>
      <version>2.15.1</version>
   </dependency>
</dependencies>

Création de Java DSL pour Spring

Créons maintenant une nouvelle classe Java appelée DistributeOrderXML. Ajoutez-y le code suivant -

public class DistributeOrderXML {
   public static void main(String[] args) throws Exception {
      ApplicationContext appContext = new ClassPathXmlApplicationContext(
         "SpringRouteContext.xml");
      CamelContext camelContext = SpringCamelContext.springCamelContext(appContext, false);
      try {
         camelContext.start();
         ProducerTemplate orderProducerTemplate = camelContext.createProducerTemplate();
         InputStream orderInputStream = new FileInputStream(ClassLoader.getSystemClassLoader()
            .getResource("order.xml").getFile());
         
         orderProducerTemplate.sendBody("direct:DistributeOrderXML", orderInputStream);
      } finally {
         camelContext.stop();
      }
   }
}

dans le main méthode, nous créons d'abord une instance de ApplicationContext, qui est l'interface centrale d'une application Spring. Dans son constructeur, nous spécifions le nom du fichier XML qui contient nos informations de routage et de filtrage.

ApplicationContext appContext = new ClassPathXmlApplicationContext(
   "SpringRouteContext.xml");

Ensuite, nous créons CamelContext en spécifiant les éléments créés ci-dessus ApplicationContext dans son paramètre.

CamelContext camelContext = SpringCamelContext.springCamelContext(appContext, false);

À ce stade, notre routage et notre filtrage sont configurés. Par conséquent, nous commençons leCamelContext en utilisant son startméthode. Comme dans le cas précédent, nous définissons le point de terminaison pour charger le fichier order.xml et commençons le traitement. Voyons maintenant comment le routage est défini en XML.

Créer un contexte d'application

Ajoutez un nouveau fichier XML au projet et appelez-le SpringRouteContext.xml. Coupez-collez le contenu suivant dans ce fichier.

<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "
      http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://camel.apache.org/schema/spring
      http://camel.apache.org/schema/spring/camel-spring.xsd ">
   <camelContext xmlns = "http://camel.apache.org/schema/spring">
      <route>
         <from uri = "direct:DistributeOrderXML"/>
         <log message = "Split by Distribute Order"/>
         <split>
            <xpath>//order[@product = 'Oil']/items</xpath>
            <to uri = "file:src/main/resources/order/"/>
            <to uri = "stream:out"/>
         </split>
      </route>
   </camelContext>
</beans>

Ici, nous définissons la requête xpath comme suit, notez que nous sélectionnons maintenant toutes les commandes pour «pétrole».

<xpath>//order[@product = 'Oil']/items</xpath>

Les points de terminaison de sortie sont multiples. Le premier point de terminaison spécifie leorder dossier et le second spécifie la console.

<to uri = "file:src/main/resources/order/"/>
<to uri = "stream:out"/>

Exécutez l'application.

Résultats de test

Lorsque vous exécutez l'application, vous verrez la sortie suivante à l'écran.

<items>
   <item>
      <Brand>Cinthol</Brand>
      <Type>Original</Type>
      <Quantity>4</Quantity>
      <Price>25</Price>
   </item>
   <item>
      <Brand>Cinthol</Brand>
      <Type>Lime</Type>
      <Quantity>6</Quantity>
      <Price>30</Price>
   </item>
</items>

Vérifiez orderdossier dans le chemin spécifié par vous. Vous trouverez un fichier nouvellement créé contenant le code XML ci-dessus.

Conclusion

Camel fournit un framework prêt à l'emploi qui implémente des EIP pour faciliter vos projets d'intégration. Il prend en charge le codage dans des langages spécifiques au domaine et également l'utilisation de XML.