Bien démarrer¶
Prérequis¶
Initialisation du projet¶
Nous allons tout d’abord initialiser notre projet à l’aide de la CLI quarkus. Créez un nouveau répertoire et tapez la commande suivante:
quarkus create app fr.pantheonsorbonne.ufr27.miage:camel-01
Cette commande va créer votre projet Quarkus. Packagez ensuite le projet pour récupérer automatiquement les dépendances avec maven
cd camel-01
./mvnw package -DskipTests=true
Ajout des dépendances Apache Camel¶
Nous alons maintenant ajouter les dépendances vers camel dont nous avons besoin. Tradictionnellement, les dépendances sont ajoutées dans le fichier pom.xml
. L’utilisation de Quarkus facilite cette opération, en proposant d’ajouter automatiquement les bonnes dépendances depuis la ligne de commande, depuis le répertoire camel-01
quarkus ext add camel-quarkus-file
Ici, nous ajoutons à notre projet la possibilité d’utiliser jms, camel, camel-file et camel-jaxb.
Ajout d’une classe CamalTutorial pour travailler sur les fichiers¶
Dans votre IDE, ajoutez une nouveau package fr.pantheonsorbonne.ufr27.miage.camel
. Ajoutez-y une nouvelle classe CamelTutoral
.
Ajouter ensuite le code java suivant:
package fr.pantheonsorbonne.ufr27.miage.camel;
import org.apache.camel.builder.RouteBuilder;
import javax.enterprise.context.ApplicationScoped;
@ApplicationScoped
public class CamelTutorial extends RouteBuilder {
@Override
public void configure() throws Exception {
from("file:data/inbox").to("file:data/outbox");
}
}
puis lancer votre programme quarkus
à l’aide de la ligne de commande
quarkus dev
OU à l’aide de votre IDE
Maintenant, lorsque vous créez des fichiers dans le répertoire data/inbox
, ceux-ci sont automatiquement copié dans le répertoire data/outbox
La classe RouteBuilder est la classe de base permettant de configurer les routes de Camel, pour cela, il faut réécrire la méthode void configure()
et utiliser la DSL Java avec les méthodes from
et to
.
Remarquez que la première partie de la définition des route (file:
) indique que le composant file est utilisé pour configurer la route. Le reste de la configuration étant spécifique à chaque composant
Se connecter à un broker compatible JMS¶
Dans cette section, nous allons connecter notre class CamelTutorial
à un broker JMS et faire transiter les messages entre data/inbox
et data/outbox
par le broker.
Camel supporte de nombreux broquer de messages, dans le reste de ce turotiel, nous allons utiliser Apache ActiveMQ Artemis, qui est l’implémentation de JMS utilisée par des containers d’applications comme JBOSS EAP et Wildfly.
Installer les nouvelles librairies¶
Utilisez la commande quarkus
ou modifiez manuellement le pom.xml
pour installer les 2 nouvelles librairies permettant d’utiliser:
le composant camel “sjms2”
ActiveMQ Artemis avec camel
Note
La ligne de commande quarkus permet d’afficher toutes les extensions disponibles en filtrant par mot clé. Par exemple, la commande suivante:
quarkus ext list --concise -i -s jdbc
vous permet d’afficher la liste des pilotes jdbc disponible avec quarkus, ainsi que d’autres extensions aditionnnelles.
Camel JDBC camel-quarkus-jdbc
Camel SQL camel-quarkus-sql
Agroal - Database connection pool quarkus-agroal
Elytron Security JDBC quarkus-elytron-security-jdbc
JDBC Driver - DB2 quarkus-jdbc-db2
JDBC Driver - Derby quarkus-jdbc-derby
JDBC Driver - H2 quarkus-jdbc-h2
JDBC Driver - MariaDB quarkus-jdbc-mariadb
JDBC Driver - Microsoft SQL Server quarkus-jdbc-mssql
JDBC Driver - MySQL quarkus-jdbc-mysql
JDBC Driver - Oracle quarkus-jdbc-oracle
JDBC Driver - PostgreSQL quarkus-jdbc-postgresql
solution
quarkus ext add camel-quarkus-sjms2 quarkus-artemis-jms
Configurer Artemis¶
La configuration d’artemis se fait à l’aide d’un fichier de configuration présent dans le projet camel-01 dans le fichier src/main/resources/application.properties
.
Ajoutez les lignes suivantes au fichier:
quarkus.artemis.url=
quarkus.artemis.username=
quarkus.artemis.password=
utilisez le serveur, username et le password fournis par l’enseignant.
Configurer les nouvelles routes¶
Vous pouvez configurer une route vers JMS en utilisant le code Java suivant:
package fr.pantheonsorbonne.ufr27.miage.camel;
import org.apache.camel.builder.RouteBuilder;
import javax.enterprise.context.ApplicationScoped;
@ApplicationScoped
public class CamelTutorial extends RouteBuilder {
@Override
public void configure() throws Exception {
from("file:data/inbox").to("sjms2:M1.fileexchange");
from("sjms2:M1.fileexchange").to("file:data/outbox");
}
}
Ici, nous définissions 2 routes: celle qui consomme les fichiers dans le répertoire data/inbox
puis les envoies, avec JMS, dans la queue M1.fileexchange
et une autre route qui lit les messages publiés dans la queue M1.fileexchange
et les écrit sous forme de fichier dans data/outbox
. Le résultat est identique
Note
Le schéma (1) indique quel composant Camel gère ce type de endpoint. Dans ce cas, le schéma de fichier sélectionne FileComponent. FileComponent fonctionne alors comme une factory, créant FileEndpoint en fonction des parties restantes de l’URI. Le chemin de contexte data/inbox
(2) indique à FileComponent que le dossier de départ est data/inbox. L’option, delay=5000 (3) indique que les fichiers doivent être interrogés à un intervalle de 5 secondes.