JBoss Fuse - Apache Camel
In questo capitolo discuteremo cos'è Apache Camel e come instrada efficacemente i dati tra gli endpoint, insieme ad alcuni esempi.
Cos'è Apache Camel?
Apache Camel è un framework di integrazione open source che è stato avviato all'inizio del 2007.
È un approccio basato su EIP (Enterprise Integration Pattern) che fornisce diverse implementazioni di modelli predefiniti che possono essere utilizzati per risolvere i problemi di integrazione aziendale. Gli EIP non sono altro che soluzioni comprovate ai problemi ben documentati e ricorrenti dell'integrazione aziendale.
Camel è anche noto come motore di routing e mediazione poiché instrada efficacemente i dati tra gli endpoint, assumendo carichi pesanti come la trasformazione dei formati dei dati, la connettività degli endpoint e molti altri.
Esempio di base
I prerequisiti per utilizzare Apache Camel sono:
- Java
- Maven
- Fusibile Redhat JBoss 6.1-GA-379
Crea lo scheletro di base dell'applicazione
mvn:archetype generate
–DgroupId = com.tutorialpoint.app
–DartifactId = camel-first-app
–DarchetypeGroupId = org.apache.camel.archetypes
–DarchetypeArtifactId = camel-archetype-spring
–DinteractiveMode = false -X
Questo dovrebbe generare la seguente struttura di directory.
Questo è uno scheletro di base della nostra applicazione Camel che viene generata.
Modifica camel-context.xml
modificare camel-first-app → src → main → resources → META-INF\spring\camel-context.xml in modo che corrisponda come di seguito
<?xml version = "1.0" encoding = "UTF-8"?>
<!-- Configures the Camel Context-->
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://camel.apache.org/schema/spring
http://camel.apache.org/schema/spring/camel-spring.xsd">
<camelContext xmlns = "http://camel.apache.org/schema/spring">
<!-- here is a sample which processes the input file
(leaving them in place - see the 'noop' flag)
then performs content based routing on the message using XPath -->
<route>
<from uri = "file:///d:/src/data?noop=false"/>
<choice>
<when>
<xpath>/person/city = 'London'</xpath>
<log message = "UK message"/>
<to uri = "file:///d:/target/messages/uk"/>
</when>
<otherwise>
<log message = "Other message"/>
<to uri = "file:///d:/target/messages/others"/>
</otherwise>
</choice>
</route>
</camelContext>
</beans>
Modifica pom.xml
Aggiungi il seguente codice all'interno di <plugins> </plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.4</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>
${project.artifactId}
</Bundle-SymbolicName>
<Import-Package>*</Import-Package>
</instructions>
</configuration>
</plugin>
Cambia tipo di confezione da jar → bundle.
<packaging>bundle</packaging>
Compila il progetto utilizzando il seguente comando:
mvn clean install
Installa il progetto in Fuse
Avvia Fuse usando Fuse.bat/start.bat. Se avvii Fuse usandostart.bat, uso client.batper connettersi 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:com.tutorialpoint.app/camel-firt-app/1.0-SNAPSHOT
Verifica se il tuo progetto è in esecuzione
Ora la tua applicazione dovrebbe essere installata in Fuse. Copia la directory dei dati all'internocamel-first-app e inseriscilo D:/src/ e dovrebbe copiare il messaggio con city = London in D:/target/merssages/uk.
Posiziona il file di input in formato D:/src/data
Input
Message1.xml
<?xml version = "1.0" encoding = "UTF-8"?>
<person user = "james">
<firstName>James</firstName>
<lastName>Strachan</lastName>
<city>London</city>
</person>
Message2.xml
<?xml version = "1.0" encoding = "UTF-8"?>
<person user = "hiram">
<firstName>Hiram</firstName>
<lastName>Chirino</lastName>
<city>Tampa</city>
</person>
Output
In D: / target / messages / uk
<?xml version = "1.0" encoding = "UTF-8"?>
<person user = "james">
<firstName>James</firstName>
<lastName>Strachan</lastName>
<city>London</city>
</person>
In D: / target / messages / others
<?xml version = "1.0" encoding = "UTF-8"?>
<person user = "hiram">
<firstName>Hiram</firstName>
<lastName>Chirino</lastName>
<city>Tampa</city>
</person>