Utilisation d’Apache Camel avec Spring

Utiliser Apache Camel avec Spring

1. Vue d'ensemble

Cet article montre comment configurer et utiliserApache Camel avec Spring.

Apache Camel fournit de nombreux composants utiles qui prennent en charge des bibliothèques telles queJPA,Hibernate,FTP,Apache-CXF,AWS-S3 et bien sûr bien d'autres - tous pour aider à intégrer les données entre deux systèmes différents.

Par exemple, à l'aide des composants Hibernate et Apache CXF, vous pouvez extraire des données d'une base de données et les envoyer à un autre système via des appels d'API REST.

Dans ce didacticiel, nous allons passer en revue un exemple simple de Camel: lire un fichier et convertir son contenu en majuscules, puis de nouveau en minuscules. Nous allons utiliser lesFile component de Camel et Spring 4.2.

Voici les détails complets de l'exemple:

  1. Lire le fichier du répertoire source

  2. Convertir le contenu du fichier en majuscules à l'aide d'unProcessor personnalisé

  3. Écrire la sortie convertie dans un répertoire de destination

  4. Convertir le contenu du fichier en minuscules en utilisantCamel Translator

  5. Écrire la sortie convertie dans un répertoire de destination

2. Ajouter des dépendances

Pour utiliser Apache Camel avec Spring, vous aurez besoin des dépendances suivantes dans votre fichier POM:


    2.16.1
    4.2.4.RELEASE



    
        org.apache.camel
        camel-core
        ${env.camel.version}
    
    
        org.apache.camel
        camel-spring
        ${env.camel.version}
    
    
        org.apache.camel
        camel-stream
        ${env.camel.version}
    
    
        org.springframework
        spring-context
        ${env.spring.version}
    

Nous avons donc:

  • camel-core - la principale dépendance pour Apache Camel

  • camel-spring - nous permet d'utiliser Camel avec Spring

  • camel-stream - une dépendance facultative, que vous pouvez utiliser (par exemple) pour afficher certains messages sur la console pendant l'exécution des routes

  • spring-context - la dépendance Spring standard, requise dans notre cas car nous allons exécuter des routes Camel dans un contexte Spring

3. Contexte du chameau de printemps

Tout d'abord, nous allons créer le fichier Spring Config dans lequel nous définirons plus tard nos itinéraires Camel.

Notez que le fichier contient tous les espaces de noms Apache Camel et Spring requis et les emplacements de schéma:




    
            
    

L'élément<camelContext> représente (sans surprise) le contexte Camel, qui peut être comparé à un contexte d'application Spring. Votre fichier de contexte est maintenant prêt à définir les itinéraires Camel.

3.1. Route de chameau avec processeur personnalisé

Ensuite, nous allons écrire notre première route pour convertir le contenu du fichier en majuscules.

Nous devons définir une source à partir de laquelle l'itinéraire lira les données. Cela peut être une base de données, un fichier, une console ou un nombre quelconque d'autres sources. Dans notre cas, ce sera un fichier.

Ensuite, nous devons définir le processeur des données qui seront lues à partir de la source. Pour cet exemple, nous allons écrire une classe de processeur personnalisée. Cette classe sera un bean Spring qui implémentera le standardCamel Processor Interface.

Une fois que les données sont traitées, nous devons indiquer l’itinéraire vers lequel diriger les données traitées. Là encore, il peut s’agir d’une sortie parmi une grande variété, telle qu’une base de données, un fichier ou la console. Dans notre cas, nous allons le stocker dans un fichier.

Pour configurer ces étapes, y compris l'entrée, le processeur et la sortie, ajoutez l'itinéraire suivant au fichier de contexte Camel:


     
     
     

De plus, nous devons définir le beanmyFileProcessor:

3.2. Processeur majuscule personnalisé

Nous devons maintenant créer le processeur de fichier personnalisé défini dans notre bean. Il doit implémenter l'interface CamelProcessor, définissant une seule méthodeprocess, qui prend un objetExchange comme entrée. Cet objet fournit les détails des données de la source d'entrée.

Notre méthode doit lire le message à partir desExchange, mettre le contenu en majuscules, puis redéfinir ce nouveau contenu dans l'objetExchange:

public class FileProcessor implements Processor {

    public void process(Exchange exchange) throws Exception {
        String originalFileContent = (String) exchange.getIn().getBody(String.class);
        String upperCaseFileContent = originalFileContent.toUpperCase();
        exchange.getIn().setBody(upperCaseFileContent);
    }
}

Cette méthode de traitement sera exécutée pour chaque entrée reçue de la source.

3.3. Processeur minuscule

Nous allons maintenant ajouter une autre sortie à notre itinéraire Camel. Cette fois, nous convertirons les données du même fichier d'entrée en minuscules. Cette fois, nous n'utiliserons cependant pas de processeur personnalisé; nous utiliserons lesMessage Translator feature d'Apache Camel. Voici l'itinéraire mis à jour pour les chameaux:


    
    
    
    
        ${body.toLowerCase()}
    
    

4. Lancer l'application

Pour que nos itinéraires soient traités, nous devons simplement charger le fichier de contexte Camel dans un contexte d'application Spring:

ClassPathXmlApplicationContext applicationContext =
  new ClassPathXmlApplicationContext("camel-context.xml");

Une fois que la route a été exécutée avec succès, deux fichiers auront été créés: un avec un contenu en majuscule et un avec un contenu en minuscule.

5. Conclusion

Si vous effectuez un travail d'intégration, Apache Camel peut certainement vous faciliter la tâche. La bibliothèque fournit des composants plug-and-play qui vous aideront à réduire le code standard et à vous concentrer sur la logique principale du traitement des données.

Et si vous voulez explorer les concepts deEnterprise Integration Patterns en détail, vous devriez jeter un œil àthis book écrit par Gregor Hohpe et et Bobby Woolf, qui conceptualisent très proprement les EIP.

L'exemple décrit dans cet article est disponible dans unproject on GitHub.