Apache Camel - używanie ze sprężyną

Teraz odtworzymy aplikację z poprzedniego rozdziału przy użyciu Springa. To da nam wyobrażenie o tym, jak utworzyć routing Camel w XML, a nie w DSL.

Tworzenie nowego projektu

Stwórz nowy Maven projektu i określ następujące elementy -

GroupId: BasketWithSpring
ArtifactId: BasketWithSpring

Wybierz domyślną lokalizację dla swojego projektu lub, jeśli wolisz, określ wybrany katalog.

Dodawanie zależności

Oprócz podstawowych zależności, których używałeś we wcześniejszej aplikacji, musisz dodać kilka innych zależności, aby używać Spring. Zależności są dodawane w pom.xml. Teraz otwórz pom.xml i dodaj następujące zależności -

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

Tworzenie Java DSL dla Spring

Utwórzmy teraz nową klasę Java o nazwie DistributeOrderXML. Dodaj do niego następujący kod -

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();
      }
   }
}

w main najpierw tworzymy instancję ApplicationContext, który jest głównym interfejsem aplikacji Spring. W jego konstruktorze podajemy nazwę pliku XML, który zawiera nasze informacje o routingu i filtrowaniu.

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

Następnie tworzymy CamelContext określając wyżej utworzone ApplicationContext w swoim parametrze.

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

W tym momencie nasz routing i filtrowanie jest skonfigurowane. Dlatego zaczynamyCamelContext używając jego startmetoda. Tak jak w poprzednim przypadku definiujemy Endpoint do załadowania pliku order.xml i rozpoczynamy przetwarzanie. Teraz zrozumiemy, jak definiuje się routing w języku XML.

Tworzenie kontekstu aplikacji

Dodaj nowy plik XML do projektu i wywołaj go SpringRouteContext.xml. Wytnij i wklej następującą zawartość do tego pliku.

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

Tutaj definiujemy zapytanie xpath w następujący sposób, zauważ, że teraz wybieramy wszystkie zamówienia na „ropę”.

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

Wyjściowe punkty końcowe są wielokrotne. Pierwszy punkt końcowy określaorder folder, a druga określa konsolę.

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

Uruchom aplikację.

Wyniki testów

Po uruchomieniu aplikacji na ekranie zobaczysz następujące dane wyjściowe.

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

Sprawdź orderfolder w ścieżce określonej przez Ciebie. Znajdziesz nowo utworzony plik zawierający powyższy kod XML.

Wniosek

Camel zapewnia gotową do użycia strukturę, która wdraża EIP, aby ułatwić projekty integracyjne. Obsługuje kodowanie w językach specyficznych dla domeny, a także użycie XML.