Apache Camel - Utilizzo con la primavera

Ricreeremo ora l'applicazione del capitolo precedente usando Spring. Questo ci darà un'idea di come creare il routing Camel in XML piuttosto che in un DSL.

Creazione di un nuovo progetto

Crea un nuovo Maven progetto e specificare quanto segue:

GroupId: BasketWithSpring
ArtifactId: BasketWithSpring

Seleziona la posizione predefinita per il tuo progetto o, se preferisci, specifica la directory di tua scelta.

Aggiunta di dipendenze

Oltre alle dipendenze principali utilizzate nell'applicazione precedente, è necessario aggiungere alcune dipendenze in più per utilizzare Spring. Le dipendenze vengono aggiunte in pom.xml. Ora apri pom.xml e aggiungi le seguenti dipendenze:

<dependencies>
   ...
   <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.1.3.RELEASE</version>
   </dependency>
   
   <dependency>
      <groupId>org.apache.activemq</groupId>
      <artifactId>activemq-pool</artifactId>
      <version>5.15.2</version>
   </dependency>
   
   <dependency>
      <groupId>org.apache.activemq</groupId>
      <artifactId>activemq-pool</artifactId>
      <version>5.15.1</version>
   </dependency>
   
   <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-spring</artifactId>
      <version>2.15.1</version>
   </dependency>
</dependencies>

Creazione di Java DSL per la primavera

Creiamo ora una nuova classe Java chiamata DistributeOrderXML. Aggiungi il seguente codice ad esso -

public class DistributeOrderXML {
   public static void main(String[] args) throws Exception {
      ApplicationContext appContext = new ClassPathXmlApplicationContext(
         "SpringRouteContext.xml");
      CamelContext camelContext = SpringCamelContext.springCamelContext(appContext, false);
      try {
         camelContext.start();
         ProducerTemplate orderProducerTemplate = camelContext.createProducerTemplate();
         InputStream orderInputStream = new FileInputStream(ClassLoader.getSystemClassLoader()
            .getResource("order.xml").getFile());
         
         orderProducerTemplate.sendBody("direct:DistributeOrderXML", orderInputStream);
      } finally {
         camelContext.stop();
      }
   }
}

Nel main metodo, prima creiamo un'istanza di ApplicationContext, che è l'interfaccia centrale all'interno di un'applicazione Spring. Nel suo costruttore, specifichiamo il nome del file XML che contiene le nostre informazioni di instradamento e filtraggio.

ApplicationContext appContext = new ClassPathXmlApplicationContext(
   "SpringRouteContext.xml");

Successivamente, creiamo CamelContext specificando quanto sopra creato ApplicationContext nel suo parametro.

CamelContext camelContext = SpringCamelContext.springCamelContext(appContext, false);

A questo punto, il nostro routing e filtro è impostato. Pertanto, iniziamo il fileCamelContext usando il suo startmetodo. Come nel caso precedente, definiamo l'endpoint per caricare il file order.xml e avviare l'elaborazione. Ora, vediamo come viene definito il routing in XML.

Creazione del contesto dell'applicazione

Aggiungi un nuovo file XML al progetto e chiamalo SpringRouteContext.xml. Taglia e incolla i seguenti contenuti in questo file.

<?xml version = "1.0" encoding = "UTF-8"?>
<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">
      <route>
         <from uri = "direct:DistributeOrderXML"/>
         <log message = "Split by Distribute Order"/>
         <split>
            <xpath>//order[@product = 'Oil']/items</xpath>
            <to uri = "file:src/main/resources/order/"/>
            <to uri = "stream:out"/>
         </split>
      </route>
   </camelContext>
</beans>

Qui, definiamo la query xpath come segue, nota che ora selezioniamo tutti gli ordini per "oil".

<xpath>//order[@product = 'Oil']/items</xpath>

Gli endpoint di output sono multipli. Il primo endpoint specifica il fileorder cartella e la seconda specifica la console.

<to uri = "file:src/main/resources/order/"/>
<to uri = "stream:out"/>

Esegui l'applicazione.

Risultati del test

Quando esegui l'applicazione, vedrai il seguente output sullo schermo.

<items>
   <item>
      <Brand>Cinthol</Brand>
      <Type>Original</Type>
      <Quantity>4</Quantity>
      <Price>25</Price>
   </item>
   <item>
      <Brand>Cinthol</Brand>
      <Type>Lime</Type>
      <Quantity>6</Quantity>
      <Price>30</Price>
   </item>
</items>

Controlla il ordercartella nel percorso specificato dall'utente. Troverai un file appena creato che contiene il codice XML sopra.

Conclusione

Camel fornisce un framework pronto per l'uso che implementa gli EIP per facilitare i tuoi progetti di integrazione. Supporta la codifica in linguaggi specifici del dominio e anche l'uso di XML.