JBoss Fuse - Concepts de chameau

Dans ce chapitre, nous allons comprendre les différents concepts de Camel. Commençons par prendre un exemple de base pour comprendre les concepts de base pour commencer.

ChameauContexte

Chaque application chameau aura au moins un CamelContext. C'est ici que nous ajoutons des itinéraires de chameaux. C'est similaire àApplicationContext du printemps.

Le contexte de chameau peut être pensé comme un conteneur qui garde toutes choses ensemble. Un contexte de chameau peut avoir plusieurs itinéraires à l'intérieur.

Itinéraires

CamelContext peut contenir une ou plusieurs routes. Les routes sont la logique d'intégration qui définit la manière dont les données circuleront dans un contexte chameau d'un point de terminaison à un autre.

Point final

Le point final est la fin du canal par lequel le système peut envoyer ou recevoir des messages. C'est ce que nous appelons la destination ou la source en langage de communication.

Composants

Les composants sont des points d'extension dans Camel. Les composants peuvent être une interface avec la technologie, le format de données, les transformateurs, etc. Ils peuvent également agir comme une usine pour les terminaux.

EIP

EIP signifie Enterprise Integration Pattern. Ce sont des solutions identifiées et bien connues à un problème récurrent. Camel prend en charge la plupart des modèles d'intégration d'entreprise.

Routeur basé sur le contenu

Les modèles CBR nous permettent d'acheminer les données selon le contenu du fichier d'entrée.

Ce modèle est utilisé lorsque nous devons acheminer des valeurs en fonction du contenu du corps de l'entrée.

L'exemple suivant lira les données de D:/data/inputannuaire. Après lecture, il vérifiera la balise de valeur à l'intérieur de la balise de données. Si la balise value contientvalue1, il sera envoyé à D:/value1, S'il contient value2, il sera envoyé à D:/value2 et si aucun de ces deux, alors il sera envoyé à d'autres.

<CamelContext xmlns = "http://camel.apache.org/schema/spring">
   <route>
      <from uri = "file:///D:/data/input"/>
      <choice>
         <when>
            <xpath>/data/value = 'value1'</xpath>
            <to uri = "file:///D:/value1"/>
         </when> 
         <when>
            <xpath>/data/value = 'value2'</xpath>
            <to uri = "file:///D:/value2"/>
         </when>  
			
         <otherwise>
            <to uri = "file:///D:/others "/>
         </otherwise>
			
      </choice>
   </route>
</camelContext>

Input

D: /data/input/message1.xml

<data>
   <value>value1</value>
</data>

D: /data/input/message2.xml

<data>
   <value>value2</value>
</data>

Output

D: / valeur1 /

<data>
   <value>value1</value>
</data>

D: / valeur2 /

<data>
   <value>value2</value>
</data>

Splitter

Un modèle de fractionnement est utilisé pour diviser les données d'entrée en plus petits morceaux.

Ce modèle est utilisé la plupart du temps avec une entrée de données énorme qui nécessite d'être divisée en morceaux, de sorte qu'il devient transformable. Il décompose l'entrée en fragments plus petits en fonction de la chaîne de jeton d'entrée.

<CamelContext xmlns = "http://camel.apache.org/schema/spring">
   <route>
      <from uri = "file:///D:/inbox"/>
      <split streaming = "true">
         <tokenize token = "order" xml = "true"/>
         <to uri = "activemq:queue:order"/>
      </split>
   </route>
</CamelContext>

Input

D: /inbox/message.xml

<order>
   <data>
      <value>value1</value>
   </data>
</order>

<order>
   <data>
      <value>value2</value>
   </data>
</order>

<order>
   <data>
      <value>value3</value>
   </data>
</order>

Output

Si vous cochez AMQ, vous trouverez 3 messages postés.

<order>
   <data>
      <value>value4</value>
   </data>
</order>

Liste des destinataires

Un modèle de liste de destinataires est utilisé lorsqu'une liste de destinataires doit être extraite du corps du message lui-même.

Dans l'exemple suivant, un message sera envoyé à tous les destinataires répertoriés dans la balise client sous forme de liste de chaînes séparées par des virgules.

<CamelContext xmlns = "http://camel.apache.org/schema/spring">
   <route>
      <from uri = "jms:xmlOrders" />
      <recipientList>
         <xpath>/order/customer</xpath>
      </recipientList>
   </route>
</camelContext>

Autres EIP

Camel prend en charge presque tous les EIP identifiés. Certains des EIP couramment utilisés sont mentionnés ci-dessous.

  • Log - Pour enregistrer un message complet ou une partie de celui-ci

  • Message Filter - Filtrage du contenu des messages

  • Re-Sequencer - Pour obtenir tous les jetons en séquence

  • Wiretap - Pour inspecter les messages itinérants

La liste complète des EIP et de leur utilisation se trouve dans la documentation officielle de Camel http://camel.apache.org/eip.html

Manipulation d'exception en chameau

Using Error Handler - C'est le moyen le plus simple de gérer les exceptions chez le chameau.

Pour l'utiliser, nous devons configurer le bean de classe du gestionnaire d'erreur et le fournir comme référence à CamelContext errorHandlerRef attribut.

<bean id = "loggingErrorHandler" class = "org.apache.camel.builder.LoggingErrorHandler">
   <property name = "logName" value = "mylogger.name"/>
   <property name = "level" value = "DEBUG"/>
</bean>

<camelContext errorHandlerRef = ” loggingErrorHandler” >
   …
</camelContext>

Utiliser Try Catch enfin

Camel prend également en charge le style Java Try Catch Finally block pour la gestion des erreurs.

Tout comme Java, il comporte les trois blocs suivants -

  • doTry block contient du code qui peut générer une exception.

  • doCatch block contient du code qui doit être exécuté en cas d'exception.

  • doFinallyblock a un code qui doit être exécuté indépendamment de l'exception. Il sera toujours exécuté, peu importe si une exception a été déclenchée ou non.

Note- Mock est un composant de test et n'est pas recommandé à d'autres fins. C'est le composant de camel utilisé pour les tests, tout comme le composant jMOck dans le développement piloté par les tests.

<route>
   <from uri = "direct:start"/>
   <doTry>
      <process ref = "someProcesorThatmayFail"/>
      <to uri = "mock:result"/>
		
      <doCatch>
         <exception>java.io.IOException</exception>
         <exception>java.lang.IllegalStateException</exception>
         <to uri = "mock:catch"/>
      </doCatch>
		
      <doFinally>
         <to uri = "mock:finally"/>
      </doFinally>
		
   </doTry>
</route>

Dans l'exemple ci-dessus, nous pouvons donner une liste d'exceptions qui doivent être gérées par le bloc catch.

Déploiement du bundle dans Fuse

Démarrer Fuse en utilisant Fuse.bat/start.bat.

Si vous démarrez Fuse à l'aide de start.bat, utilisez client.bat pour vous connecter à Fuse. Vous devriez obtenir l'interface utilisateur comme indiqué dans la capture d'écran suivante.

Il s'agit de la CLI pour accéder aux commandes Karaf et Fuse.

install –s mvn:group.id /artifact.id/version 
e.g. install –s mvn:com.tutorialpoint.app/camel-firt-app/1.0-SNAPSHOT