JBoss Fuse - Camel Concepts

In questo capitolo capiremo i diversi concetti di Camel. Cominciamo con un esempio di base per comprendere i concetti fondamentali per cominciare.

CamelContext

Ogni applicazione cammello avrà almeno un CamelContext. Questo è il luogo in cui aggiungiamo le rotte dei cammelli. È simile aApplicationContext di primavera.

Il contesto cammello può essere pensato come un contenitore che tiene insieme tutte le cose. Un contesto di cammello può avere più percorsi al suo interno.

Itinerari

CamelContext può contenere uno o più percorsi. Le rotte sono la logica di integrazione che definisce il modo in cui i dati fluiranno nel contesto del cammello da un endpoint a un altro.

Endpoint

L'endpoint è la fine del canale attraverso cui il sistema può inviare o ricevere messaggi. Questo è ciò che chiamiamo destinazione o fonte nel linguaggio di comunicazione.

Componenti

I componenti sono un punto di estensione in Camel. I componenti possono essere un'interfaccia per la tecnologia, il formato dei dati, i trasformatori, ecc. Possono anche fungere da fabbrica per gli endpoint.

EIP

EIP sta per Enterprise Integration Pattern. Si tratta di soluzioni identificate e ben note a un problema ricorrente. Camel supporta la maggior parte dei modelli di integrazione aziendale.

Router basato sui contenuti

I modelli CBR ci consentono di instradare i dati in base al contenuto del file di input.

Questo modello viene utilizzato quando dobbiamo instradare valori in base al contenuto del corpo dell'input.

Il seguente esempio leggerà i dati da D:/data/inputdirectory. Dopo la lettura, controllerà il tag di valore all'interno del tag di dati. Se il tag del valore contienevalue1, verrà inviato a D:/value1, Se contiene value2, verrà inviato a D:/value2 e se nessuno di questi entrambi, verrà inviato ad altri.

<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: / valore1 /

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

D: / valore2 /

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

Splitter

Un modello di divisione viene utilizzato per dividere i dati di input in blocchi più piccoli.

Questo modello viene utilizzato la maggior parte delle volte con un enorme input di dati che richiede di essere diviso in blocchi, quindi diventa processabile. Suddividi l'input in frammenti più piccoli in base alla stringa del token di input.

<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

Se controlli AMQ troverai 3 messaggi pubblicati.

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

Elenco destinatari

Un modello elenco destinatari viene utilizzato quando è necessario recuperare un elenco di destinatari dal corpo del messaggio stesso.

Nell'esempio seguente, un messaggio verrà inviato a tutti i destinatari elencati nel tag del cliente come elenco di stringhe separate da virgole.

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

Altri PEI

Camel fornisce supporto a quasi tutti gli EIP identificati. Alcuni degli EIP comunemente usati sono indicati di seguito.

  • Log - Per registrare il messaggio completo o parte di esso

  • Message Filter - Filtraggio dei contenuti dei messaggi

  • Re-Sequencer - Per ottenere tutti i gettoni in sequenza

  • Wiretap - Ispezionare i messaggi di viaggio

L'elenco completo di EIP e il loro utilizzo può essere trovato nella documentazione ufficiale di Camel http://camel.apache.org/eip.html

Gestione delle eccezioni in Camel

Using Error Handler - Questo è il modo più semplice per gestire le eccezioni in cammello.

Per usarlo, dobbiamo configurare il bean di classe del gestore degli errori e fornirlo come riferimento a CamelContext errorHandlerRef attributo.

<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>

Utilizzando Try Catch Finalmente

Camel supporta anche lo stile Java Try Catch Finally block per la gestione degli errori.

Proprio come Java, ha i seguenti tre blocchi:

  • doTry block contiene codice che può generare un'eccezione.

  • doCatch block contiene codice che deve essere eseguito in caso di eccezione.

  • doFinallyIl blocco ha un codice che deve essere eseguito indipendentemente dall'eccezione. Verrà sempre eseguito indipendentemente dal fatto che l'eccezione sia stata sollevata o meno.

Note- Mock è un componente di test e non è raccomandato per altri scopi. È il componente in camel utilizzato per i test proprio come il componente jMOck nello sviluppo basato su test.

<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>

Nell'esempio sopra, possiamo fornire un elenco di eccezioni che devono essere gestite dal blocco catch.

Distribuzione di bundle in Fuse

Avvia Fuse usando Fuse.bat/start.bat.

Se avvii Fuse usando start.bat, usa client.bat per connetterti a Fuse. Dovresti ottenere l'interfaccia utente come mostrato nello screenshot seguente.

Questa è la CLI per accedere ai comandi Karaf e Fuse.

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