Apache Camel - Использование с Spring

Теперь мы воссоздадим приложение из предыдущей главы с помощью Spring. Это даст нам представление о том, как создать маршрутизацию Camel в XML, а не в DSL.

Создание нового проекта

Создать новый Maven проект и укажите следующее -

GroupId: BasketWithSpring
ArtifactId: BasketWithSpring

Выберите расположение по умолчанию для вашего проекта или, если вы предпочитаете, укажите каталог по вашему выбору.

Добавление зависимостей

В дополнение к основным зависимостям, которые вы использовали в предыдущем приложении, вам необходимо добавить еще несколько зависимостей для использования Spring. Зависимости добавляются в pom.xml. Теперь откройте pom.xml и добавьте следующие зависимости -

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

Создание Java DSL для Spring

Давайте теперь создадим новый класс Java с именем DistributeOrderXML. Добавьте к нему следующий код -

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

в main метод, сначала мы создаем экземпляр ApplicationContext, который является центральным интерфейсом в приложении Spring. В его конструкторе мы указываем имя XML-файла, который содержит нашу информацию о маршрутизации и фильтрации.

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

Далее мы создаем CamelContext указав созданный выше ApplicationContext в его параметре.

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

На этом этапе наша маршрутизация и фильтрация настроены. Поэтому мы начинаемCamelContext используя его startметод. Как и в предыдущем случае, мы определяем конечную точку для загрузки файла order.xml и начинаем обработку. Теперь давайте разберемся, как в XML определяется маршрутизация.

Создание контекста приложения

Добавьте в проект новый XML-файл и назовите его SpringRouteContext.xml. Вырежьте и вставьте в этот файл следующее содержимое.

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

Здесь мы определяем запрос xpath следующим образом, обратите внимание, что теперь мы выбираем все заказы для «нефти».

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

Выходных конечных точек несколько. Первая конечная точка указываетorder папка, а вторая указывает на консоль.

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

Запустите приложение.

Результаты теста

Когда вы запустите приложение, вы увидите на экране следующий результат.

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

Проверьте orderпапку по указанному вами пути. Вы найдете только что созданный файл, содержащий указанный выше код XML.

Вывод

Camel предоставляет готовую к использованию структуру, которая реализует EIP для облегчения ваших проектов интеграции. Он поддерживает кодирование на предметно-ориентированных языках, а также использование XML.