Учебники

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>

Конечные точки вывода являются множественными. Первая конечная точка указывает папку заказа, а вторая — консоль.

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

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

Заключение

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