JBoss Fuse - Kamelkonzepte

In diesem Kapitel werden wir die verschiedenen Kamelkonzepte verstehen. Beginnen wir mit einem einfachen Beispiel, um zunächst die Kernkonzepte zu verstehen.

CamelContext

Jede Kamelanwendung hat mindestens einen CamelContext. Dies ist der Ort, an dem wir Kamelrouten hinzufügen. Es ist ähnlich wieApplicationContext des Frühlings.

Der Kamelkontext kann als ein Behälter betrachtet werden, der alle Dinge zusammenhält. Ein Kamelkontext kann mehrere Routen enthalten.

Routen

CamelContext kann eine oder mehrere Routen enthalten. Routen sind die Integrationslogik, die definiert, wie Daten im Kamelkontext von einem Endpunkt zum anderen fließen.

Endpunkt

Endpunkt ist das Ende des Kanals, über den das System Nachrichten senden oder empfangen kann. Dies nennen wir in der Kommunikationssprache Ziel oder Quelle.

Komponenten

Komponenten sind Erweiterungspunkte in Camel. Komponenten können eine Schnittstelle zu Technologie, Datenformat, Transformatoren usw. sein. Sie können auch als Factory für Endpunkte dienen.

EIP

EIP steht für Enterprise Integration Pattern. Dies sind identifizierte und bekannte Lösungen für ein wiederkehrendes Problem. Camel unterstützt die meisten Enterprise-Integrationsmuster.

Inhaltsbasierter Router

Mit CBR-Mustern können wir Daten gemäß dem Inhalt der Eingabedatei weiterleiten.

Dieses Muster wird verwendet, wenn Werte abhängig vom Inhalt des Eingabekörpers weitergeleitet werden müssen.

Das folgende Beispiel liest Daten aus D:/data/inputVerzeichnis. Nach dem Lesen wird innerhalb des Daten-Tags nach Wert-Tags gesucht. Wenn das Wertetag enthältvalue1wird es an gesendet D:/value1, Wenn es enthält value2wird es an gesendet D:/value2 und wenn keines von beiden, dann wird es an andere gesendet.

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

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

D: / value2 /

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

Splitter

Ein Splitter-Muster wird verwendet, um Eingabedaten in kleinere Blöcke aufzuteilen.

Dieses Muster wird meistens bei großen Dateneingaben verwendet, die in Blöcke aufgeteilt werden müssen, damit es verarbeitbar wird. Die Eingabe wird basierend auf der Eingabe-Token-Zeichenfolge in kleinere Fragmente unterteilt.

<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

Wenn Sie AMQ aktivieren, werden 3 Nachrichten veröffentlicht.

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

Empfängerliste

Ein Empfängerlistenmuster wird verwendet, wenn eine Empfängerliste aus dem Nachrichtentext selbst abgerufen werden muss.

Im folgenden Beispiel wird eine Nachricht an alle Empfänger gesendet, die im Kunden-Tag als durch Kommas getrennte Liste von Zeichenfolgen aufgeführt sind.

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

Andere EIPs

Camel unterstützt fast alle identifizierten EIPs. Einige der häufig verwendeten EIP sind wie unten erwähnt.

  • Log - Um die vollständige Nachricht oder einen Teil davon zu protokollieren

  • Message Filter - Filtern von Nachrichteninhalten

  • Re-Sequencer - Um alle Token nacheinander zu erhalten

  • Wiretap - Um Fahrnachrichten zu überprüfen

Die vollständige Liste der EIP und ihrer Verwendung finden Sie in der offiziellen Dokumentation von Camel http://camel.apache.org/eip.html

Ausnahmebehandlung bei Kamelen

Using Error Handler - Dies ist der einfachste Weg, um Ausnahmen bei Kamelen zu behandeln.

Um dies zu verwenden, müssen wir die Error Handler Class Bean konfigurieren und als Referenz auf bereitstellen 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>

Verwenden von Try Catch Endlich

Camel unterstützt auch den Java-Stil Try Catch Finally block zur Fehlerbehandlung.

Genau wie Java hat es die folgenden drei Blöcke -

  • doTry Block enthält Code, der eine Ausnahme erzeugen kann.

  • doCatch Block enthält Code, der im Ausnahmefall ausgeführt werden muss.

  • doFinallyBlock hat Code, der unabhängig von der Ausnahme ausgeführt werden muss. Es wird immer ausgeführt, egal ob eine Ausnahme ausgelöst wurde oder nicht.

Note- Mock ist eine Testkomponente und wird für andere Zwecke nicht empfohlen. Es ist die Komponente in Camel, die zum Testen verwendet wird, genau wie die jMOck-Komponente in der testgetriebenen Entwicklung.

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

Im obigen Beispiel können wir eine Liste von Ausnahmen angeben, die vom catch-Block behandelt werden müssen.

Bundle in Fuse bereitstellen

Starten Sie die Sicherung mit Fuse.bat/start.bat.

Wenn Sie Fuse mit start.bat starten, verwenden Sie client.bat, um eine Verbindung zu Fuse herzustellen. Sie sollten die Benutzeroberfläche wie im folgenden Screenshot gezeigt erhalten.

Dies ist die CLI für den Zugriff auf Karaf- und Fuse-Befehle.

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