Intégration et médiation avec Apache Camel
Depuis quelques jours, je teste Apache Camel pour la mise en œuvre de médiations.
Apache Camel est un framework assez ancien. Il est similaire à Spring Intégration et permet l’ implémentation de patterns d’intégration.
Les patterns d’intégration
Qu’est-ce qu’un pattern d’intégration allez-vous me dire ? C’est une solution d’architecture ou plus simplement une recette de cuisine permettant d’avoir une solution toute prête à une problématique d’intégration donnée. L’ensemble de ces patterns est décrit sur ce site ( ne vous attardez pas sur le look des années 90 … ).
Exemple :
Camel permet simplement de gérer l’intégration via un DSL.
Choix d’implémentations
On peut faire pas mal de choses avec ce FRAMEWORK et de plusieurs manières. J’ai fait les choix d’implémentation suivants :
- Tout se fera avec SPRING … et pas en XML
- Il faut que toutes les médiations soient testables
- J’exécute le code dans un FATJAR ( pourquoi avec springboot )
Configuration de la route
Apache Camel définit les médiations dans des routes. Elles se définissent assez rapidement .
Les routes commencent par une instruction from et se terminent par une ou plusieurs instructions to.
Pour mon exemple, j’extrais les données d’une table et les stocke dans un fichier.
Tout se configure par des URLs. La première permet d’extraire les données via JPA/HIBERNATE. Une entité Address permet le requêtage. La seconde permet le stockage dans un fichier texte JSON.
Elles sont externalisées dans des fichiers de configuration pour faciliter les tests et accessibles via SPRING.
Lancement de la route
Le lancement de la route se fait dans une méthode main() :
Tests
Camel fournit une API de test assez bien fournie. Elle permet notamment de mocker des endpoints existants (ex. : le fichier de sortie de mon cas de test).
Dans mon cas, j’ai décidé de remplacer la base de données que j’interroge en input par une base HSQLDB chargée en mémoire. Le fichier de sortie est, lui, remplacé dynamiquement par un mock. Pour ce faire, j’ai utilisé les « adviceWith »
Pour aller plus loin
Il y a pas mal d’exemples sur le GITHUB de CAMEL. Vous pouvez également acheter le livre « Camel In Action ». Ca ne vaut pas Effective Java , mais vu qu’il est écrit par le principal développeur, c’est une très bonne référence.